我最近开始探索VS Code来开发Python代码,当我尝试从子文件夹中导入模块时遇到了一个问题。当我在Jupyter笔记本中执行该代码时,完全相同的代码可以完美运行(子文件夹包含__init__.py
文件等。)我相信我已按照说明正确设置了VS Python扩展。除了此一个导入命令以外的所有其他命令都可以正常工作,但我无法弄清楚到底出了什么问题。
项目的结构如下:设置为cwd
的根文件夹包含两个子文件夹(src
和bld
)。 src
包含py
文件,该文件导入使用foo.py
bld
文件夹中的from bld.foo import foo_function
文件夹中的模块。
运行文件时,出现以下错误:ModuleNotFoundError: No module named ‘bld'
。我安装了几个Anaconda Python环境,每个环境都遇到相同的问题。将foo.py
复制到src
目录并使用from foo import foo_function
时,一切正常。
我的launch.json
文件如下:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File (Integrated Terminal)",
"type": "python",
"request": "launch",
"program": "${file}",
"cwd": "${workspaceFolder}",
"env": {"PYTHONPATH": "${workspaceFolder}:${workspaceFolder}/bld"},
"console": "integratedTerminal"
}
]
}
任何想法或帮助将不胜感激!
答案 0 :(得分:0)
我想我终于想出了答案:集成终端不扫描PYTHONPATH
文件中的.env
。但是,在集成窗口中运行文件时,PYTHONPATH
正确地来自.env
。因此,为了在终端中运行脚本,我必须在terminal.integrated.env.*
中添加settings.json
行,如下所示:
{
"python.pythonPath": "/anaconda3/envs/py36/bin/python",
"python.linting.enabled": true,
"python.linting.pylintEnabled": true,
"python.linting.flake8Enabled": false,
"python.envFile": "${workspaceFolder}/.env",
"terminal.integrated.env.osx": {
"PYTHONPATH": "${workspaceFolder}"
}
}
答案 1 :(得分:0)
Stefan的方法对我有用。
以文件系统为例: workspaceFolder / folder / subfolder1 / subfolder2 / bar.py
我无法导入以下子文件夹:
from folder.subfolder1.subfolder2 import bar
它说:ModuleNotFoundError: No module named 'folder'
我在.vscode / settings.json中添加了以下内容:
"terminal.integrated.env.osx": {
"PYTHONPATH": "${workspaceFolder}"
}
我还在代码的开头添加了
import sys
#[... more imports ...]
sys.path.append(workspaceFolder)
# and then, the subfolder import:
from folder.subfolder1.subfolder2 import bar
现在,它可以工作了。
注意:我所有的文件夹和子文件夹都有一个名为__init__.py
的空文件。我仍然必须执行上述步骤。
VSCode版本:1.52.0(从2020年12月10日开始)