[英]Python in VS Code: Error when importing module from subfolder
我最近開始探索 VS Code 以開發 Python 代碼,當我嘗試從子文件夾導入模塊時遇到了問題。 當我在 Jupyter 筆記本中執行完全相同的代碼時(子文件夾包含__init__.py
文件等),完全相同的代碼可以完美運行。我相信我遵循了正確設置 VS Python 擴展的說明。 除了這個導入命令之外的其他所有東西都運行良好,但我無法弄清楚到底出了什么問題。
該項目的結構如下: 根文件夾,設置為cwd
包含兩個子文件夾( src
和bld
)。 src
包含導入模塊的py
文件,該模塊使用from bld.foo import foo_function
bld
文件夾中的foo.py
中
運行該文件時,出現以下錯誤: 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"
}
]
}
任何想法或幫助將不勝感激!
我想我終於自己想出了答案:集成終端不會從.env
文件中掃描PYTHONPATH
。 但是,在集成的 window 中運行文件時, PYTHONPATH
正確地取自.env
。 因此,為了在終端中運行我的腳本,我必須在我的settings.json
中添加terminal.integrated.env.*
行,如下所示:
{
"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}"
}
}
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 日起)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.