我试图构建一个新的包,但是当我尝试从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
尝试在calculations.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}"
}
}
]