在Windows下的VSCode中调试Python时,会忽略`.venv`

问题描述

我在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,但是之后。根据{{​​3}}和VSCode docs - Where the extension looks for environments,诗歌venvs几乎不受ATM支持

我已经尝试通过添加来指定microsoft/vscode-python/issues/8372

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

无法成功访问项目本地.vscode/settings.json文件

我该如何解决解决此问题?

解决方法

这不是错误。默认的终端前缀应为PS \the current working directory\,因此,当我们开始调试时,它将打开一个显示默认前缀的新终端实例。但是,当我们查看其执行脚本时:

enter image description here

第一个是.venv\python.exe,我们将其选择为解释器,调试完成后,环境被激活。然后再次选择调试,此终端将保持.venv处于激活状态。

,

事实证明,该问题与venv管理无关,而与必须如何处理console_script s有关。调试:https://stackoverflow.com/a/64558717/5308983

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...