roc*_*tor 29 python visual-studio-code
我正在尝试构建一个新包,但是,当我尝试从 VSCode 内部或终端运行任何文件时,我遇到了以下错误:
ModuleNotFoundError: No module name 'x'
Run Code Online (Sandbox Code Playgroud)
我当前的文件夹结构如下:
package
|---module
|------__init__.py
|------calculations.py
|------miscfuncs.py
|---tests
|------__init__.py
|------test_calcs.py
|---setup.py
|---requirements.txt
Run Code Online (Sandbox Code Playgroud)
但是,当我通过 VSCode 并在 test_calcs.py 中使用import module.calculations as calc或运行测试(PyTest)时from module.calculations import Class,测试按预期工作 - 这让我感到困惑。
我知道这是一个常见问题,但我无法找出适用于此的解决方案。
我尝试使用下面的代码检查工作目录是否在系统路径中。返回的目录列表中的第一项是我正在使用的目录。
import sys
print(sys.path)
Run Code Online (Sandbox Code Playgroud)
我还在文件中使用了以下内容但无济于事:
import module.calculations
import .module.calculations
from . import miscfuncs
Run Code Online (Sandbox Code Playgroud)
尝试时import .module.calculations,我得到以下信息:
ModuleNotFoundError: No module named '__main__.module'; '__main__' is not a package
Run Code Online (Sandbox Code Playgroud)
当尝试from . import miscfuncs在calculations.py中时,我收到以下错误:
ImportError: cannot import name 'miscfuncs'
Run Code Online (Sandbox Code Playgroud)
当处理模块文件夹中的文件时,我可以使用相对导入:import calculations并且它工作得很好。这对于模块内的文件来说很好,但当我在 test_calcs.py 中工作时就不行了。
在我的 setup.py 中,我有一行:
packages=['module']
Run Code Online (Sandbox Code Playgroud)
如果需要的话,很高兴发布更多信息或链接到我的存储库以获取完整代码。
编辑
以下是雷姆拉姆的解决方案:
我已更新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}"
}
}
]
Run Code Online (Sandbox Code Playgroud)
小智 22
@lepidopterist 的评论被证明是数小时挣扎的游戏规则改变者......
"terminal.integrated.env.windows": { "PYTHONPATH": "${workspaceFolder}" }
供参考: Settings.json
这是我的项目结构... 项目
我的项目中有三个模块/包!
我想做的事!
什么没有奏效!
from ..convenience.utilities import add
给了...
beyond top level package error
Run Code Online (Sandbox Code Playgroud)
from convenience.utilities import add
给了...
ModuleNotFoundError: No module named 'convenience'
Run Code Online (Sandbox Code Playgroud)
"env": {"PYTHONPATH": "${workspaceFolder}"}
给了...
ModuleNotFoundError: No module named 'convenience'
Run Code Online (Sandbox Code Playgroud)
为什么该解决方案(我在开始时提到过!)有效?
(需要注意的一件事):我的操作系统是 Windows,所以它是......
"terminal.integrated.env.windows"
Run Code Online (Sandbox Code Playgroud)
对于 Linux 来说,这将是...
"terminal.integrated.env.linux"
Run Code Online (Sandbox Code Playgroud)
如果您想工作,请确保您是从该package文件夹(而不是从)运行。您还可以将环境变量设置为文件夹的路径。package/moduleimport module.calculationsPYTHONPATHpackage
为了调试 main.py VSCode 需要知道显式库路径。这可以通过在 launch.json 中设置环境 (\'env\') 变量来完成。第一步是在 .vscode 文件夹中创建一个“launch.json”。
\n/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .vscode/\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 launch.json\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 mySubdir/\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 myLib.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.py\nRun Code Online (Sandbox Code Playgroud)\n如果 main.py 想要将 myLib.py 作为模块导入,则仅当 mySubDir 是 Python 路径的一部分时,VSCode 才能执行此操作。
\n示例 launch.json:
\n{\n "version": "0.2.0",\n "configurations": [\n {\n "name": "Python: Current File",\n "type": "python",\n "request": "launch",\n "program": "${file}",\n "console": "integratedTerminal",\n "cwd": "${fileDirname}",\n "env": {"PYTHONPATH": "${workspaceFolder}/mySubdir:${env:PYTHONPATH}"},\n }\n ]\n}\nRun Code Online (Sandbox Code Playgroud)\n{workspaceFolder}是一个预定义变量,将被 VSCode 替换。我也使用了{pathSeparator}但发现它在 Linux 中不起作用,所以现在我使用 \':\' 代替。
\n该线程给出了更广泛的解释:How to Correctly set PYTHONPATH for Visual Studio Code
\n| 归档时间: |
|
| 查看次数: |
79739 次 |
| 最近记录: |