在具有活动 virtualenv 的 python 模块上使用 vscode 调试器,launch.json 中的“配置文件中的 python 路径无效”

Posted

技术标签:

【中文标题】在具有活动 virtualenv 的 python 模块上使用 vscode 调试器,launch.json 中的“配置文件中的 python 路径无效”【英文标题】:Using vscode debugger on python module with active virtualenv, "the python path in your configuration file is invalid" in launch.json 【发布时间】:2021-11-20 20:40:41 【问题描述】:

我想在 vscode 中调试一个 python 模块以节省时间并帮助我弄清楚代码发生了什么。但是我有两个问题(我将更多地关注这篇文章的第一个问题),它们似乎与我没有正确使用 launch.json 有关,我想知道出了什么问题。我正在使用 Mac。

我的模块名为__main__。它的完整绝对路径是~/Code/APPRES-483/cqs/update-query-definition/__main__.py__main__.py 是一个脚本,但该模块似乎也称为__main__)。 我正在使用~/Code/APPRES-483/venv-cqs/ 的 virtualenv。我在~/Code/APPRES-483/cqs/update-query-definition/ 中打开了一个 VSCode 窗口。

现在我的launch.json 文件看起来像这样。


    "version": "0.2.0",
    "configurations": [
        
            "name": "Python: Module",
            // "python":"~/Code/APPRES-483/venv-cqs/bin/python",
            "type": "python",
            "request": "launch",
            "module": "__main__",
            "pythonArgs":[
                "-v",
                "--file-to-write", "~/Code/APPRES-483/LOCAL-query-definition.yml"
            ],
        ,

    ]

第一个问题是我实际上无法在launch.json中设置python解释器路径。我在 VSCode 中激活了我的 virtualenv(即我看到了我打算看到的 venv-cqs 的前缀)。

如果我打开一个终端并输入~/Code/APPRES-483/venv-cqs/bin/python,那将正确打开 venv-cqs/bin 内的 python 终端/可执行文件。如果我添加像"python":"~/Code/APPRES-483/venv-cqs/bin/python" 这样的行,我会收到一条消息“您的调试配置中的python 路径无效。”

我尝试按照https://***.com/a/66885651/6432861 的说明使用 Python:选择解释器命令。我遇到了一些奇怪的行为。

如果我尝试浏览 finder/files 以在 venv-cqs/bin/ 中找到 python 可执行文件,一旦我双击该文件,它实际上并没有进入 vs code 的 python 解释器。如果我将鼠标悬停在左下角,我仍然会在 /usr/local/bin 或其他任何地方看到我的默认 python 安装地址。

但是,如果我复制并粘贴 ~/Code/APPRES-483/venv-cqs/bin/python 而不是尝试浏览文件,这会成功更改 python 解释器,我可以在屏幕的左下角看到它。

代码避免这些错误的唯一方法是,如果我在 launch.json 的配置中没有 python 字段。我知道事情不应该是这样的......我想知道出了什么问题。

我遇到的第二个问题是 pythonArgs。但我会尝试再发一篇关于它的文章,因为这已经足够长了。

【问题讨论】:

~ 扩展是一个 shell 功能。不保证它可以在其他地方工作。 那么在vscode中扩展家庭地址的语法是什么?我找不到任何说波浪号不起作用的东西,而且文件左侧的资源管理器工具提示也使用波浪号扩展。 @KlausD。我刚刚发现使用完整的扩展路径(例如/Users/bineyb/Code/.... 而不是~ 似乎可以解决问题。这与此github票证中讨论的问题相同,但据称他们应该修复它以使波浪号正常工作(它不适合我):github.com/microsoft/vscode/issues/32736 【参考方案1】:

首先,你可以设置

 "python.defaultInterpreterPath": "~/Code/APPRES-483/venv-cqs/bin/python",

User Settings.json 中指定 python 解释器。如果它不起作用并且 VS Code 仍然在左下角显示默认 python 安装为 python 解释器,删除用户数据文件夹 $HOME/Library/Application Support/Code.~/.vscode 可以重置 VS Code。

其次,设置python默认为你的工作区选择的解释器,所以一旦你选择venv-cqs作为python解释器,debug会默认使用它,如果你坚持,设置

"python": "$command:python.interpreterPath"

【讨论】:

我认为这行得通。现在,当我使用 Select Interpreter 命令时,我可以选择use Python from defaultInterpreterPath setting。但是我仍然很困惑,我之前用"python":"~/Code/APPRES-483/venv-cqs/bin/python" 声明python 的方式有什么问题?为什么那不是一条有效的路径? @ByronSmith。我使用的是 Windows,完整路径还可以,可能是路径格式错误?

以上是关于在具有活动 virtualenv 的 python 模块上使用 vscode 调试器,launch.json 中的“配置文件中的 python 路径无效”的主要内容,如果未能解决你的问题,请参考以下文章

如何运行具有模块的代码,每个模块都在不同的 virtualenv 中?

如何利用virtualenv工具在JupyterHub上以非root权限创建基于Python3.6.6的虚拟环境?

2022流行的 Python 项目虚拟环境创建--virtualenv

在 Fedora 26 上使用 virtualenv venv 时出错

virtualenv --no-site-packages 和 pip 仍在寻找全局包?

python虚拟环境搭建与使用