繁体   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