我在使用 vscode 过程中老是遇到无法导入自己写的包的情况,搜索后发现是设置 pythonpath 这个环境变量,但看来看去还是一头雾水,而且如果真是 pythonpath 这个环境变量在起作用,岂不是每开一个项目都需要配置一遍,想问问各位有没有一劳永逸的方法,谢谢各位
多谢各位,我主要想实现的是
.-\
|
|_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就能够得到输出。想请问各位有一劳永逸的方法吗😂,还是说小弟我的调用方法有问题
1
RRRoger 2021-08-30 19:07:43 +08:00
cmd + shift + p 调出命令窗口
然后输入 `select interpreter` |
3
chenqh 2021-08-30 19:48:06 +08:00
写到全局的环境变量里面?
|
4
chenqh 2021-08-30 19:48:52 +08:00
1. 你应该写道 windows 的环境变量里面呀, 这种情况下你的包是本地包
2. 打包到 pypi 上面去 |
5
v2byy 2021-08-30 19:50:46 +08:00 via iPhone
windows 本地还是 pycharm 吧,否则就 wsl
|
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 |
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 的做法,做好看是看看能不能直接把外部包放到当前工作目录,或者进行发布 |
8
chaleaoch 2021-08-30 20:57:08 +08:00
无法导入是什么意思?
自动提示吗? 自动跳转吗? 是否导入和 vscode 没关系 vscode 就是个编辑器. |
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 目录就行了 |
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+~ |
11
zachlhb 2021-08-31 08:58:54 +08:00 via iPhone
vscode 自动导包要装插件的
|
12
andy2415 2021-08-31 09:25:34 +08:00
Python › Analysis: Extra Paths
|
13
jeeyong 2021-08-31 09:48:04 +08:00
打开 VS Code -> 文件 -> 首选项 -> 设置[或者快捷键 Ctrl + ,] -> 搜索 env -> 在左侧导航条里选择 python 环境.
有个 python Env File 选项. 默认应该是: ${workspaceFolder}/.env 改成你经常创建虚拟环境的目录名, 比如我是 envs 或者你用默认的也没问题, 即.env 然后你每次打开项目文件, vscode 会自动识别这个目录, 并使用这个目录下的虚拟环境. |
14
ipwx 2021-08-31 09:53:34 +08:00 1
楼主你先说清楚是当前项目的包无法导入还是别的项目的包无法导入。
姑且认为是后者,后者是需要配置的。两条路: 1. 用标准的 python 包结构,写 setup.py ,这样你自己的包就能 pip install . 安装了。 2. 把你自己的包扔到一个统一的地方,然后把那个路径加 PYTHONPATH 。 |
15
xingheng 2021-08-31 12:52:14 +08:00
一直是 pyenv,很少碰到过 import 失败或者提示不存在的情况。也可以试试 pipenv
|
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 |
18
chenqh 2021-09-04 13:49:24 +08:00
你这种使用.env 文件
在项目下面新建一个`.env` 文件 ``` PYTHONPATH=. ``` |
19
song135711 2021-09-08 12:44:37 +08:00
|
20
zanelee 2021-09-16 11:46:31 +08:00
这个 pycharm 会自动导入当前工程内的包的。之前 windows 上的工程放到 linux 也会报这种错,然后干脆就把要导入的包放到了 python 目录下的 site-package 里面了
|