簡體   English   中英

如何從VS Code中的本地python包導入?

[英]How to import from local python packages in VS Code?

我的項目結構是這樣的:

- my_pkg
    setup.py
    README.md
    - my_pkg
        __init__.py
        __main__.py
         - src
             app.py
             part.py
             __init__.py
         - tests
             test_app.py
             test_parts.py
             __init__.py

在test_app.py中我有以下import語句:

import my_pkg.src.app as app

在我的終端我可以使用運行該文件

python -m my_pkg.tests.test_app

這運行正常,沒有任何錯誤,但是當我右鍵單擊test_app.py並選擇“在終端中運行Python文件”時,我收到以下錯誤:

ModuleNotFoundError: No module named 'my_pkg'

我通過運行安裝了my_pkg:

pip install -e .

如果我打開一個終端並運行python並在python中運行“import my_pkg.src.app as app”它可以正常工作。

我究竟做錯了什么。 在visual studio代碼中運行程序時,如何讓我的導入工作?

因為您運行的cwd位於“test.py”文件中。

您需要將root目錄添加到系統路徑

import sys
import os
sys.path.append(os.path.join(os.path.dir(__file__), "from/file/to/root"))
print (sys.path)

將目錄更改為“my_pkg”並按如下方式運行代碼

python -m my_pkg.tests.test_app

在這里查看-m標志文檔

我能夠通過更改launch.json文件找到一種方法來使調試器工作:

{
    "version": "0.1.0",
    "configurations": [
        {
            "name": "Python: Module: my_pkg",
            "type": "python",
            "request": "launch",
            "module": "my_pkg",
            "console": "integratedTerminal"
        },
        {
            "name": "Python: Current File (Integrated Terminal)",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "env" : {"PYTHONPATH": "${workspaceFolder}"},
            "console": "integratedTerminal"
        },
        {
            "name": "Python: Remote Attach",
            "type": "python",
            "request": "attach",
            "port": 5678,
            "host": "localhost",
            "pathMappings": [
                {
                    "localRoot": "${workspaceFolder}",
                    "remoteRoot": "."
                }
            ]
        },
        {
            "name": "Python: Current File (External Terminal)",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "env" : {"PYTHONPATH": "${workspaceFolder}"},
            "console": "externalTerminal"
        }
    ]
}

“Python:Module my_pkg”將通過運行帶有-m參數的__ main __。py-file和“Python:當前文件(集成終端)”和“Python:當前文件(外部終端)”來運行我的模塊運行當前文件打開,但將workspaceFolder作為PYTHONPATH,這樣我的導入就不會中斷。

我還沒有找到一種方法來更改配置,以便我可以右鍵單擊一個文件並選擇“在終端中運行Python文件”而不會破壞它。 但我只是手動在終端中運行它,直到找到解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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