VSCode 终端中的 conda activate 未正确更新 PATH

PATH not updated correctly from conda activate in VSCode's terminal

我正在使用 VSCodes 终端面板。我激活了一个 conda 环境。由于某种原因,python 命令仍然设置为 /usr/bin/python,而不是 conda 环境的正确路径。

% conda activate myenv
% which python
/usr/bin/python

正确的 anaconda 环境目录似乎在 $PATH 变量中,但 /usr/bin 似乎优先于它。

当我通过 OS 打开标准终端时,行为如我所料。

% conda activate myenv
% which python
/Users/cpl/anaconda3/envs/myenv/bin/python

请注意:我已经将 VSCode 首选项键 python.pythonPath 设置为 /Users/cpl/anaconda3/envs/myenv/bin/python,并且我认为它可以正常工作。当我通过右键单击并选择 Run Python File In Terminal 运行 文件时,将执行正确的 python (来自 conda 环境)。我的问题是直接使用VSCode终端执行python.

我的shell是zsh,我用的是OSX。有什么建议吗?

我不使用 zsh,但我 运行 在 bash 中遇到过这个问题,我相信原因是一样的。

Conda 最近更改了 "official" 激活环境的方法,如本期所述:https://github.com/Microsoft/vscode-python/issues/1882

之前,您需要修改 .bashrc/.zshrc 以在 PATH 前面加上 conda 的 activate 脚本的目录,然后通过键入 source activate name_of_env。 VSCode-Python 通过将此命令发送到 shell 来激活 conda 终端 — 带有可见的回显,就像您自己输入的一样。

新方法是在 .bashrc 中获取 $HOME/anaconda3/etc/profile.d/conda.sh,然后使用 conda activate name_of_env 激活环境,这是您看到的在专用终端中正常工作的行为。 VSCode-Python 尚不支持此功能,而且 Windows 上的跨平台支持似乎存在问题,这使过渡变得复杂。

目前最好的解决方案是忽略 conda activate 的 "correct" 方法并始终使用旧的 source activate name_of_env,它仍然有效(如果您的 PATH 设置包括 $HOME/anaconda3/bin).

下面的黑魔法可能有用:-

在我的 Big Sur 中,我将以下空条目添加到我的 settings.json - 可以在 File(Windows)/Code(Mac)>Preferences>Settings 中找到-- 单击任何 link 声明的“在 settings.json 中编辑”

"terminal.integrated.env.osx": {
        "PATH": ""
}

祝一切顺利!

此行为在 VSCode 文档中进行了解释: Why are there duplicate paths in the terminal's $PATH environment variable and/or why are they reversed?#

听起来 VSCode 将 运行 你的 .zshrc 在 MacOS 中两次,与 conda 生成的 PATH 变量定义冲突。

上面link中列出了两种解决方案。对我有用的方法是设置 VSCode 设置 "terminal.integrated.inheritEnv": false。该文档警告说,如果您这样做,您的所有环境变量都将被删除。但是,我发现我仍然在 .zshrc 文件中定义了我的自定义变量。

值得注意的是,VSCode 的最新版本会在检测到您使用的是 conda 环境时提示您,并建议进行此更改。

如果以后有其他人最终对这个特定问题摸不着头脑,我发现了另一个罪魁祸首:

终端>集成>环境:启用持久会话

我怀疑发生的事情是在您更新系统路径后,VScode 将旧路径缓存在终端中并保留它。在这种情况下,它会保留旧的 python 路径而不是新的 conda 路径。

关闭此选项并重新启动 VSCode 会清除缓存,并加载新路径。您也可以在完成后重新打开此选项。