【发布时间】:2020-10-03 13:34:44
【问题描述】:
我正在尝试构建一个新包,但是,当我尝试从 VSCode 内部或终端运行任何文件时,我遇到了这个错误:
ModuleNotFoundError: No module name 'x'
我目前的文件夹结构如下:
package
|---module
|------__init__.py
|------calculations.py
|------miscfuncs.py
|---tests
|------__init__.py
|------test_calcs.py
|---setup.py
|---requirements.txt
但是,当我通过 VSCode 运行测试 (PyTest) 并在 test_calcs.py 中使用 import module.calculations as calc 或 from module.calculations import Class 时,测试按预期工作 - 这让我感到困惑。
我知道这是一个常见问题,但我想不出一个在这里可行的解决方案。
我尝试使用以下代码检查工作目录是否在系统路径中。返回的目录列表中的第一项是我正在使用的目录。
import sys
print(sys.path)
我还在文件中使用了以下内容,但无济于事:
import module.calculations
import .module.calculations
from . import miscfuncs
尝试import .module.calculations 时,我得到以下信息:
ModuleNotFoundError: No module named '__main__.module'; '__main__' is not a package
在calculation.py 中尝试from . import miscfuncs 时,出现以下错误:
ImportError: cannot import name 'miscfuncs'
在处理模块文件夹中的文件时,我可以使用相对导入:import calculations,它工作正常。这对于模块内的文件很好,但当我在 test_calcs.py 中工作时则不行。
在我的 setup.py 中,我有一行:
packages=['module']
如果需要,很高兴发布更多信息或指向我的存储库的链接以获取完整代码。
编辑
按照 remram 的解决方案:
我已更新 launch.json 以包含 CWD 和 PYTHONPATH 变量。
模块名称仍然无法识别,但是 VSCode 中的 IntelliSense 可以很好地提取导入文件中的函数。
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"cwd": "${workspaceFolder}",
"env": {"PYTHONPATH": "${cwd}"
}
}
]
【问题讨论】:
-
我被困在这个问题上很长时间了。我弄清楚这一点的关键是研究 VSCode 和 PyCharm 在处理源或根目录的概念方面的区别。在 PyCharm 中,事情对您来说非常容易,但在 VSCode 中,您必须经历更多的麻烦。我更改了 launch.json 和 settings.json 文件以将 PYTHONPATH 定义为 "terminal.integrated.env.linux": {"PYTHONPATH": "${workspaceFolder}/src",},