簡體   English   中英

VS Code 中的 Python:從子文件夾導入模塊時出錯

[英]Python in VS Code: Error when importing module from subfolder

我最近開始探索 VS Code 以開發 Python 代碼,當我嘗試從子文件夾導入模塊時遇到了問題。 當我在 Jupyter 筆記本中執行完全相同的代碼時(子文件夾包含__init__.py文件等),完全相同的代碼可以完美運行。我相信我遵循了正確設置 VS Python 擴展的說明。 除了這個導入命令之外的其他所有東西都運行良好,但我無法弄清楚到底出了什么問題。

該項目的結構如下: 根文件夾,設置為cwd包含兩個子文件夾( srcbld )。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM