V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
CamD
V2EX  ›  Python

如何正确配置 vscode Python

  •  
  •   CamD · 2021-08-30 19:00:47 +08:00 via iPhone · 3683 次点击
    这是一个创建于 1179 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我在使用 vscode 过程中老是遇到无法导入自己写的包的情况,搜索后发现是设置 pythonpath 这个环境变量,但看来看去还是一头雾水,而且如果真是 pythonpath 这个环境变量在起作用,岂不是每开一个项目都需要配置一遍,想问问各位有没有一劳永逸的方法,谢谢各位

    第 1 条附言  ·  2021-08-31 10:53:59 +08:00

    多谢各位,我主要想实现的是

    .-\
      |
      |_app
      |       |_ __init__.py
      |       |_ hello.py
      |
      |_test
              |_test.py
    
    # app/hello.py
    
    def hello():
        print("hello")
    
    # test/test.py
    
    from app.hello import hello
    
    if __name__ == "__main__":
        hello()
    

    在test.py里调用hello.py的函数,但执行 python test/test.py 时候会抛出 ModuleNotFoundError: No module named 'app' 错误,搜索了结果是说设置PYTHONPATH,在控制台执行export PYTHONPATH="$PWD"后再执行python test/test.py就能够得到输出。想请问各位有一劳永逸的方法吗😂,还是说小弟我的调用方法有问题

    20 条回复    2021-09-16 11:46:31 +08:00
    RRRoger
        1
    RRRoger  
       2021-08-30 19:07:43 +08:00
    cmd + shift + p 调出命令窗口

    然后输入 `select interpreter`
    CamD
        2
    CamD  
    OP
       2021-08-30 19:32:21 +08:00 via iPhone
    @RRRoger 这个我知道,也正确选择了
    chenqh
        3
    chenqh  
       2021-08-30 19:48:06 +08:00
    写到全局的环境变量里面?
    chenqh
        4
    chenqh  
       2021-08-30 19:48:52 +08:00
    1. 你应该写道 windows 的环境变量里面呀, 这种情况下你的包是本地包
    2. 打包到 pypi 上面去
    v2byy
        5
    v2byy  
       2021-08-30 19:50:46 +08:00 via iPhone
    windows 本地还是 pycharm 吧,否则就 wsl
    jaredyam
        6
    jaredyam  
       2021-08-30 19:53:23 +08:00
    什么鬼,$PYTHONPATH 和 vs code 有什么关系?
    一劳永逸的方法:在你的 shell 配置中添加 export PYTHONPATH=/path/to/your/package

    如果是你自己写的包,且不在当前开发项目文件中,设置$PYTHONPATH 为你的包路径可以帮助 Python 包导入系统识别到你的包位置,如果
    1 )长期依赖这个包进行开发;
    2 )没有发布和写 setup 的打算;
    3 )希望退出当前项目目录时自动 unset 包路径
    你可以看下 direnv 这个 utility
    jaredyam
        7
    jaredyam  
       2021-08-30 19:59:33 +08:00   ❤️ 1
    如果你不清楚$PYTHONPATH 是什么:

    1 )它是系统路径环境变量,可通过在 shell 中 echo $PYTHONPATH 进行查看
    2 )一般情况下$PYTHONPATH 是 unset 的,也即 echo 的值为空,在这一设置下 which python 只能导入 which pip 和当前工作目录下的所有包,具体默认路径可通过 sys.path 还是啥的查看(不重要)
    3 )设置$PYTHONPATH 相当于添加了 custom 的包导入路径,也就是你当前的需求,因此你看到的解决方案没有问题,是你的执行方式和理解有问题
    4 )还有一种添加$PYTHONPATH 的方式是通过 python 代码添加包路径,可能的使用场景你可自行体会,反正都是些比较 hardcode 的做法,做好看是看看能不能直接把外部包放到当前工作目录,或者进行发布
    chaleaoch
        8
    chaleaoch  
       2021-08-30 20:57:08 +08:00
    无法导入是什么意思?
    自动提示吗?
    自动跳转吗?

    是否导入和 vscode 没关系 vscode 就是个编辑器.
    imn1
        9
    imn1  
       2021-08-30 22:33:52 +08:00
    先按#1 设好,重点是设 workspace 的解析器
    然后 save workspace as...
    关闭 workspace,再重新打开刚才保存的,基本就可以了,以后也不用重新设置(其他的 workspace setting 改动都会自动存在这个文件,无需手动处理)

    一般出现 vscode 提示找不到包(明明装好的,运行没问题),多数是环境冲突,例如多个版本、多个环境
    或者
    代码在不同的机器同步,各自的解析器路径不同,如果 workspace 的配置也同步了,造成其中一台找不到解析器
    所以上述保存的 code-workspace 注意要每台机器独立,不应同步,各自打开

    如果自写的包想在不同项目使用,又没有安装,可以简单写个文本文件,把包的路径写进去,保存为.pth 扩展名,名字随意且不和其他包冲突,扔到 site-package 目录就行了
    l4ever
        10
    l4ever  
       2021-08-31 08:54:56 +08:00
    正确的姿势是使用虚拟环境, 创建项目目录之后
    cd d:\project
    python -m venv .venv
    code.exe #打开 vscode 之后底部左侧点击选择解释器->选择项目内的.venv\scripts\python.exe
    下次打开 vscode 会自动激活虚拟环境, 或者手动 ctrl+tab+~
    zachlhb
        11
    zachlhb  
       2021-08-31 08:58:54 +08:00 via iPhone
    vscode 自动导包要装插件的
    andy2415
        12
    andy2415  
       2021-08-31 09:25:34 +08:00
    Python › Analysis: Extra Paths
    jeeyong
        13
    jeeyong  
       2021-08-31 09:48:04 +08:00
    打开 VS Code -> 文件 -> 首选项 -> 设置[或者快捷键 Ctrl + ,] -> 搜索 env -> 在左侧导航条里选择 python 环境.

    有个 python Env File 选项. 默认应该是: ${workspaceFolder}/.env
    改成你经常创建虚拟环境的目录名, 比如我是 envs
    或者你用默认的也没问题, 即.env

    然后你每次打开项目文件, vscode 会自动识别这个目录, 并使用这个目录下的虚拟环境.
    ipwx
        14
    ipwx  
       2021-08-31 09:53:34 +08:00   ❤️ 1
    楼主你先说清楚是当前项目的包无法导入还是别的项目的包无法导入。

    姑且认为是后者,后者是需要配置的。两条路:

    1. 用标准的 python 包结构,写 setup.py ,这样你自己的包就能 pip install . 安装了。
    2. 把你自己的包扔到一个统一的地方,然后把那个路径加 PYTHONPATH 。
    xingheng
        15
    xingheng  
       2021-08-31 12:52:14 +08:00
    一直是 pyenv,很少碰到过 import 失败或者提示不存在的情况。也可以试试 pipenv
    frostming
        16
    frostming  
       2021-09-03 10:10:45 +08:00   ❤️ 1
    这跟用什么 IDE 用什么环境用什么包管理没一点关系,这是没搞清楚 Python 找包的逻辑,以及不同运行方式对 sys.path 的影响

    看这里 https://frostming.com/2019/03-13/where-do-your-packages-go/#%E8%84%9A%E6%9C%AC%E8%BF%90%E8%A1%8C%E6%96%B9%E5%BC%8F%E5%AF%B9%E6%90%9C%E7%B4%A2%E8%B7%AF%E5%BE%84%E7%9A%84%E5%BD%B1%E5%93%8D
    CamD
        17
    CamD  
    OP
       2021-09-03 12:19:25 +08:00 via iPhone
    @frostming 多谢
    chenqh
        18
    chenqh  
       2021-09-04 13:49:24 +08:00
    你这种使用.env 文件
    在项目下面新建一个`.env` 文件
    ```
    PYTHONPATH=.
    ```
    zanelee
        20
    zanelee  
       2021-09-16 11:46:31 +08:00
    这个 pycharm 会自动导入当前工程内的包的。之前 windows 上的工程放到 linux 也会报这种错,然后干脆就把要导入的包放到了 python 目录下的 site-package 里面了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1458 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 17:15 · PVG 01:15 · LAX 09:15 · JFK 12:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.