【问题标题】:`.venv` ignored when debugging Python in VSCode under Windows`.venv` 在 Windows 下在 VSCode 中调试 Python 时被忽略
【发布时间】:2021-02-03 01:13:59
【问题描述】:

我在 Windows 中有一个 Python 项目,它通过console_script 提供命令行应用程序。 Python 包在<project-root>/.venv 中使用了一个诗歌 virtualenv,并以可编辑模式安装到 venv 中。

现在我想在集成的 VSCode 终端中调试命令行应用程序。为了能够做到这一点,我创建了一个launch.json 配置,如下所示:

{
    // 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: Device Agent (WLAN)",
            "type": "python",
            "request": "launch",
            "program": "mvp-end-device-agent",
            "args": ["<", "-r", "D:\\MassHunter\\Data\\demo_0000.d"],
            "console": "integratedTerminal"
        }
    ]
}

如果我启动调试器,则会打开一个新终端并收到以下错误:

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.


PS D:\mvp-end-device-agent>  & 'd:\mvp-end-device-agent\.venv\Scripts\python.exe' 'c:\Users\Plasmion\.vscode\extensions\ms-python.python-2020.9.114305\pythonFiles\lib\python\debugpy\launcher' '58875' '--' 'mvp-end-device-agent' '<' '-r' 'D:\MassHunter\Data\demo_0000.d'
Traceback (most recent call last):
  File "d:\python\python386\lib\runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "d:\python\python386\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "c:\Users\Plasmion\.vscode\extensions\ms-python.python-2020.9.114305\pythonFiles\lib\python\debugpy\__main__.py", line 45, in <module>
    cli.main()
  File "c:\Users\Plasmion\.vscode\extensions\ms-python.python-2020.9.114305\pythonFiles\lib\python\debugpy/..\debugpy\server\cli.py", line 430, in main
    run()
  File "c:\Users\Plasmion\.vscode\extensions\ms-python.python-2020.9.114305\pythonFiles\lib\python\debugpy/..\debugpy\server\cli.py", line 267, in run_file
    runpy.run_path(options.target, run_name=compat.force_str("__main__"))
  File "d:\python\python386\lib\runpy.py", line 264, in run_path
    code, fname = _get_code_from_file(run_name, path_name)
  File "d:\python\python386\lib\runpy.py", line 234, in _get_code_from_file
    with io.open_code(decoded_path) as f:
FileNotFoundError: [Errno 2] No such file or directory: 'D:\\mvp-end-device-agent\\mvp-end-device-agent'
PS D:\mvp-end-device-agent> & d:/mvp-end-device-agent/.venv/Scripts/Activate.ps1
(.venv) PS D:\mvp-end-device-agent>

在执行命令行应用程序之前似乎没有激活 venv,但之后。根据VSCode docs - Where the extension looks for environmentsmicrosoft/vscode-python/issues/8372 诗歌venvs 几乎不支持ATM。

我已经尝试通过添加来指定venv Python environment manually

{
    "python.pythonPath": "${workspaceFolder}/.venv/Scripts/python.exe"
}

到项目本地.vscode/settings.json文件没有成功。

我该如何解决或解决这个问题?

【问题讨论】:

  • @panagiotis-kanavos 你认为这是 VSCode 中的错误吗?
  • 您是否尝试过像这样手动激活venv:stackoverflow.com/questions/64439019/…,然后通过python filename.py执行项目?
  • venv的激活没有问题。它可以自动和手动工作。但是,如果您运行调试器,则会创建一个新的终端实例,并且需要激活 venv 作为调试器 + venv 管理器集成的一部分。

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


【解决方案1】:

这不是错误。默认终端前缀应该是PS \the current working directory\,所以当我们开始调试时,它会打开一个显示默认前缀的新终端实例。然而,当我们查看它的执行脚本时:

第一个是.venv\python.exe,我们选择它作为解释器,调试完成后,环境被激活。然后你再次选择调试,这个终端将保持.venv被激活。

【讨论】:

  • 您的解决方案是 w.r.t.一个 Python 模块。不过我有一个console_script。问题是我错误地将“程序”解释为也适用于可执行文件,现在已解决:stackoverflow.com/a/64558717/5308983
【解决方案2】:

事实证明,这个问题与 venv 管理无关,而是与如何处理 console_scripts 相关。调试:https://stackoverflow.com/a/64558717/5308983

【讨论】:

    猜你喜欢
    • 2020-06-23
    • 2021-10-21
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多