问题描述
我个人比较习惯使用vscode编码,在vnpy中自定义了模块然后其他地方引用,发现vscode总是报错ModuleNotFoundError,但是在Pycharm中又是正常的,之前一直不明白原因,学习了上篇模块化的内容后,才明白这和PYTHONPATH有关,Pycharm会自动把项目根目录的绝对地址添加到了sys.path中,而Vscode需要自行设置
import sys
paths = sys.path
print(paths)
上篇文章说到,Python解释器在遇到import的时候,它会在一个特定的列表中寻找模块,vscode中打印sys.path,没有项目根目录,所以会报错
解决方案
在Visual Studio Code的setting.json中添加如下代码
"terminal.integrated.env.windows": {
"PYTHONPATH": "${workspaceFolder};${env:PYTHONPATH}"
},
//在工作区寻找模块(windows系统),MacOS上替换为"terminal.integrated.env.osx",Linux上替换为"terminal.integrated.env.linux"
-
"terminal.integrated.env.windows": 指定这些环境变量设置适用于 windows系统。
-
"PYTHONPATH": 是一个环境变量,用于 Python 解释器,指定模块查找的额外目录。
-
"${workspaceFolder}": 是一个预定义的变量,它会被替换为当前 VSCode 工作区的路径。
-
"${env:PYTHONPATH}": 是一个预定义的变量,它会被替换为当前环境中 PYTHONPATH 环境变量的值。如果 PYTHONPATH 未设置,这将是一个空字符串。
整体解释:
这个设置将 PYTHONPATH 环境变量设置为包含当前工作区的路径和原始 PYTHONPATH 的值。这样做的目的通常是为了确保 Python 解释器能够在模块查找路径中找到工作区中的模块和包。
例如,如果你的工作区路径是 /path/to/workspace,并且原始 PYTHONPATH 是 /path/to/some/libs,那么在这个设置下,新的 PYTHONPATH 将被设置为 /path/to/workspace:/path/to/some/libs。这意味着 Python 解释器将首先在 /path/to/workspace 目录中查找模块,然后在 /path/to/some/libs 目录中查找。
这样设置以后,我们再打印sys.path,项目根目录已经在列表中,这样代码就可以正常运行了