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

Pet*_*ter 9 python anaconda conda visual-studio-code vscode-debugger

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

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

测试代码:import_pandas.py

    import pandas
    print("Pandas import succeeded!")
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

请注意,调试器停止后,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!
Run Code Online (Sandbox Code Playgroud)

有没有办法在第一次调用调试器之前激活 conda?

Bre*_*non 7

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

使用 conda 非常困难。您可以关注我们的元问题,该问题跟踪我们试图与 conda 团队解决的所有问题。

  • 我可以通过 `"terminal.integrated.shellArgs.windows": ["/K", "conda activate py37"]` 设置手动激活 conda。虽然这仅适用于集成终端,但它不会对调试器使用的集成终端产生影响。然而,自动激活的一个问题是,它首先(并且不必要地)激活 conda 基础环境,并且仅在第二步中激活项目环境 - 并且调试器通常恰好在两者之间启动。 (3认同)