【问题标题】:Run python file in module mode using VS Code debugger使用 VS Code 调试器以模块模式运行 python 文件
【发布时间】:2021-08-18 13:10:03
【问题描述】:

这是我的目录结构 -

src
    Main.py
    Message.py
    ...
    __init__.py

Main.py 中,我有一个导入语句import src.Message。当我使用命令python3 -m src.Main.py 自己执行文件时,这工作正常@

但是,当我使用 VS 代码调试器执行相同操作时,我得到一个 ModuleNotFoundException

我认为这是因为调试器没有使用-m 标志,所以我在 VS Code 调试器中使用了运行模块配置。

我在其中输入了src.Main.py,当程序启动时,调试器无法连接到它,几秒钟后我得到一个错误。

【问题讨论】:

    标签: python debugging visual-studio-code vscode-debugger


    【解决方案1】:

    问题是parent folder of 'src' 尚未添加到sys.path

    你在src's父文件夹的位置下运行python3 -m src.Main.py,对吗?然后src的父文件夹的位置会添加到sys.path中。

    所以,你需要配置launch.json文件,以便将相关路径添加到sys.path

    如果在VSCode中打开src的文件夹:

      "env": {
        "PYTHONPATH": "../"
      },
    

    如果在VSCode中打开src's parent的文件夹:

      "env": {
        "PYTHONPATH": "${workspaceFolder}"
      },
    

    launch.json 将如下所示:

    "configurations": [
        {
            "name": "Python: Current File",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal",
            "env": {
                "PYTHONPATH": "${workspaceFolder}"
              },
        }
    ]
    

    【讨论】:

      【解决方案2】:

      如果您要在 VSCode 中调试模块,则不要包含 .py 文件扩展名(仅限 src.Main)。在您的情况下,您的 launch.json 文件应如下所示:

      {
          "version": "0.2.0",
          "configurations": [
              {
                  "name": "Python: Module",  // Whatever name you see fit!
                  "type": "python",
                  "request": "launch",
                  "module": "src.Main"
              }
          ]
      }
      

      基于目录而不是模块名称的替代配置:

      {
          "version": "0.2.0",
          "configurations": [
              {
                  "name": "Python Program",  // Whatever name you see fit!
                  "type": "python",
                  "request": "launch",
                  "program": "${workspaceRoot}/src/Main.py",
                  "console": "integratedTerminal"
              }
          ]
      }
      

      更多Python调试配置可以查看this link

      【讨论】:

      • @dumbPotato21 如果您有多个要调试的模块,可以使用扩展名Command Variable 和命令extension.commandvariable.file.relativeDirDots 来获取文件的点分隔路径
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-04
      • 2022-10-14
      • 2020-12-16
      • 1970-01-01
      相关资源
      最近更新 更多