如何在 VS Code 中从本地 Python 包导入?

3

我的项目结构如下:

- 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 my_pkg.src.app as app

在我的终端中,我可以使用以下命令运行文件:

最初的回答
python -m my_pkg.tests.test_app

这段代码运行正常,没有出现任何错误。但是当我右键点击test_app.py文件并选择“在终端中运行Python文件”时,会出现以下错误:

Original Answer翻译成:“最初的回答”

ModuleNotFoundError: No module named 'my_pkg'

I have installed my_pkg by running:

pip install -e .

如果我打开终端并运行python,然后在python中运行"import my_pkg.src.app as app",它就能正常工作。

我做错了什么?如何在Visual Studio Code中运行程序时使我的导入工作正常?

最初的回答:

您需要确保在Visual Studio Code中使用的Python解释器与您在终端中使用的Python解释器相同。您可以通过按下Ctrl + Shift + P并输入“Python:选择解释器”来更改解释器。

3个回答

3

我成功地找到了一种方法来使调试器正常工作,只需更改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: 模块 my_pkg" 将通过使用 -m 参数运行 __ main __.py 文件来运行我的模块,而 "Python: 当前文件 (终端内)" 和 "Python: 当前文件 (外部终端)" 运行当前打开的文件,但会将 workspaceFolder 作为 PYTHONPATH,以便我的导入不会出错。
我仍然没有找到一种方法来更改配置,以便我可以右键单击文件并选择 "在终端中运行 Python 文件" 而不会出错。但是,我只需手动在终端中运行它,直到找到解决方案为止。"

0
因为你的当前工作目录在你的 "test.py" 文件所在的位置。
你需要将根目录添加到系统路径中。
import sys
import os
sys.path.append(os.path.join(os.path.dir(__file__), "from/file/to/root"))
print (sys.path)

0
将您的目录更改为'my_pkg',然后按照以下方式运行您的代码。
python -m my_pkg.tests.test_app

请查看 -m 标志的文档 这里


1
是的,我可以像这样从终端运行它。我该如何配置VS Code在调试模式下自动运行它,无论是在终端中运行还是在自动检测到的测试中运行? - undefined
@dagrun 你好伙计,你能找到解决办法吗? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接