【问题标题】:Why doesn't VSCode activate conda before starting the debugger?为什么 VSCode 在启动调试器之前不激活 conda?
【发布时间】:2019-10-21 19:47:35
【问题描述】:

当我在 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?

【问题讨论】:

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


    【解决方案1】:

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

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

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


    UPD。现在我只是在 VS Code 中使用 PowerShell,并没有遇到这个问题:

    • 启动 Anaconda Powershell 提示 (conda)
    • conda init powershell 它会向 %USERPROFILE%\Documents\WindowsPowerShell\profile.ps1 写入脚本,但请仔细检查您的用户名中是否包含非拉丁符号!
    • Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
    • conda config --set auto_activate_base false

    【讨论】:

      【解决方案2】:

      遇到同样的问题。

      来源: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>"
      

      这解决了我的问题

      【讨论】:

      • 感谢您的回答!我的设置中已经有了这些行,但它并没有解决我的问题。
      【解决方案3】:

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

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

      【讨论】:

      • 感谢您的回答! Virtualenv 和 pipenv 对我来说也很好用。这是一个 conda 问题。
      【解决方案4】:

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

      使用 conda 很难。您可以关注our meta issue,它正在跟踪我们试图与 conda 团队一起解决的所有问题。

      【讨论】:

      • 感谢您的提示。我已经害怕了。所以至少我可以停止寻找以某种方式改变执行顺序的设置参数。
      • 我可以通过 "terminal.integrated.shellArgs.windows": ["/K", "conda activate py37"] 设置手动激活 conda。虽然这仅适用于集成终端,但它不会对调试器使用的集成终端产生影响。但是,自动激活的一个问题是它首先(并且不必要地)激活了 conda 基础环境,并且仅在第二步中激活项目环境 - 并且调试器通常正好在两者之间启动。
      • VSCode 重用 python 调试控制台进行下一次调试启动。所以解决方法是保持python调试控制台打开并再次启动调试......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 2019-05-21
      • 2019-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多