VSCode:如何将模块从我的代码路径导入到同一路径中的另一个文件?

mba*_*i23 8 python visual-studio-code

我正在尝试使用 VSCode 调试我的 python 应用程序。但我无法正确配置我的环境。尝试将类从源路径中的一个文件夹导入到另一个文件夹时,会出现以下消息:

Traceback (most recent call last):
  File "/Users/mb/Library/source/sandbox/lib/lib.py", line 1, in <module>
    from app.main import MyClass
ModuleNotFoundError: No module named 'app'
Run Code Online (Sandbox Code Playgroud)

我创建了一个简单的应用程序来展示该问题。我的源路径如下所示:

sandbox
+-- .vscode
    --- launch.json
+-- app
    --- __init__.py
    --- main.py
+-- lib
    -- lib.py
Run Code Online (Sandbox Code Playgroud)
Traceback (most recent call last):
  File "/Users/mb/Library/source/sandbox/lib/lib.py", line 1, in <module>
    from app.main import MyClass
ModuleNotFoundError: No module named 'app'
Run Code Online (Sandbox Code Playgroud)
sandbox
+-- .vscode
    --- launch.json
+-- app
    --- __init__.py
    --- main.py
+-- lib
    -- lib.py
Run Code Online (Sandbox Code Playgroud)

尝试lib.py使用默认配置来运行当前文件,我收到上面的错误消息。

另外,我创建了一个.vscode/launch.json来设置工作目录,但无济于事。这是我的launch.json

# main.py

class MyClass:
    def __init__(self):
        print('Creating object...')
    def print_message(self, message):
        print(message)
Run Code Online (Sandbox Code Playgroud)

我确信,我错过了一个简单的设置,但我无法指出它。


笔记

  • 使用的解释器是:Python 3.7.5 64位
  • 上面的代码在 PyCharm 中运行良好。
  • 在阅读了一些 VSCode 文档后,我添加了"env": {"PYTHONPATH": "${workspaceFolder}"}launch.json但这没有任何作用。
  • 我还创建了一个 VSCode任务来回显该${workspaceFolder}变量,并且输出被\从路径中删除,就好像它们没有被转义一样。这是任务.vscode/tasks.json
# lib.py

from app.main import MyClass


myclass = MyClass()
myclass.print_message('hello, world!')
Run Code Online (Sandbox Code Playgroud)

这是从中得到的输出:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Current File",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal",
            "cwd": "${workspaceFolder}"
        },
        {
            "name": "Python: Module",
            "type": "python",
            "request": "launch",
            "module": "main"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

Ada*_*uss 0

让我尽力帮助您。当您想导入不在当前目录中的文件时,请这样做。

from . import main
Run Code Online (Sandbox Code Playgroud)

对于第二个问题,请访问此链接