为什么VSCode在启动调试器之前不激活conda?

时间:2019-06-06 09:52:09

标签: python visual-studio-code anaconda conda vscode-debugger

当我在VSCode中启动调试器时,仅在调试过程因“缺少所需的依赖项”导入错误而停止调试后,才会激活conda环境。立即重新启动调试器可以正常工作。

Anaconda的“基础”和其他环境会出现此问题。

测试代码:import_pandas.py

    import pandas
    print("Pandas import succeeded!")

VSCode Python调试控制台:

Microsoft Windows [Version 10.0.16299.1146]
(c) 2017 Microsoft Corporation. All rights reserved.

C:\Users\peter\demo>cd c:\Users\peter\demo && 
    cmd /C "set "PYTHONIOENCODING=UTF-8" && 
    set "PYTHONUNBUFFERED=1" && 
    C:\Users\peter\AppData\Local\Anaconda3\python.exe 
        c:/Users/peter/.vscode/extensions/ms-python.python-2019.5.18678/pythonFiles/ptvsd_launcher.py 
            --default --client --host localhost --port 49530 
c:\Users\peter\demo\import_pandas.py "

...

ImportError: Missing required dependencies ['numpy']

C:\Users\peter\demo>C:/Users/peter/AppData/Local/Anaconda3/Scripts/activate

(base) C:\Users\peter\demo>conda activate base

(base) C:\Users\peter\demo>

请注意,调试器停止后,conda会自动激活。

激活环境后,调试过程将不再失败:

(base) C:\Users\peter\demo>cd c:\Users\peter\demo && 
    cmd /C "set "PYTHONIOENCODING=UTF-8" && 
    set "PYTHONUNBUFFERED=1" && 
    C:\Users\peter\AppData\Local\Anaconda3\python.exe 
        c:/Users/peter/.vscode/extensions/ms-python.python-2019.5.18678/pythonFiles/ptvsd_launcher.py 
        --default --client --host localhost --port 49544 
c:\Users\peter\demo\import_pandas.py "

Pandas import succeeded!

在第一次调用调试器之前,有什么方法可以激活conda吗?

4 个答案:

答案 0 :(得分:1)

有同样的问题。

https://github.com/formulahendry/vscode-code-runner/issues/395https://github.com/formulahendry/vscode-code-runner/issues/395

采购

将其放入settings.json:

"code-runner.executorMap": {
    "python": "$pythonPath -u $fullFileName",
}, 
"code-runner.runInTerminal": true,

它不会在第一次执行前放置“ conda activate ...”,而是从以下位置替换了代码运行程序命令:

"python -u <file path>"

收件人:

"<virtual environment path> -u <file path>"

这解决了我的问题

答案 1 :(得分:1)

我已经安装了AutoLaunch扩展名并添加了以下启动配置:

{ // Activate environment on startup with AutoLaunch extension
    "name": "activate",
    "type": "python",
    "request": "launch",
    "code": "",
    "auto": true,
},

因此它运行空的Python脚本,然后激活的终端保持打开状态。

答案 2 :(得分:0)

并不是在调试器故意停止后调试器激活了conda环境,而是conda激活如此之慢,直到调试器本身完成之后才完成(这不是虚拟环境的问题,因为它们不需要激活即可正常运行)。基本上,我们要求VS Code启动带有激活命令的终端,然后启动调试器,但是调试器的运行速度比conda激活快,因此直到调试器之后才执行。

使用conda很难。您可以遵循our meta issue来跟踪我们要与conda团队一起解决的所有问题。

答案 3 :(得分:0)

这似乎适合我的Python调试问题。我的python脚本可在基本conda环境中正常工作。但是,一旦我使用Python扩展名启动调试器,便立即开始在调试控制台中看到导入DLL错误,但是调试器并不会因该错误而停止。它仅在3秒钟左右后关闭调试器,而无需执行脚本。我什至可以稍后在脚本中设置断点,并且在此行之后它不会停止。重新启动调试器的操作与原始描述不同。 我尝试卸载,然后重新安装MS Python扩展,但无济于事。您可以提供的任何线索都很好,我不是vs代码方面的专家。谢谢。

更新:我使调试器正常工作。我在项目工作区中创建了Windows 10 Python虚拟环境。显然,这可以解决以下所述的conda env激活延迟,但Windows虚拟环境显然不是这种延迟。