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

Posted

技术标签:

【中文标题】PATH 未从 VSCode 终端中的 conda activate 正确更新【英文标题】:PATH not updated correctly from conda activate in VSCode's terminal 【发布时间】:2019-01-18 09:59:42 【问题描述】:

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

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

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

当我通过操作系统打开标准终端时,行为与我预期的一样。

% 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。有什么建议吗?

【问题讨论】:

我会再次检查 echo $SHELL 在两者中是否相同,以确保应该在您的 shell 配置中由 github.com/conda/conda/blob/master/… 指定的魔法位已被执行。跨度> 是的,我的 .zshrc 文件中有运行 conda.sh 的“神奇”位。 $SHELL 变量在 vscode 终端和系统终端中都是/bin/zsh 嗯,显然有一些断开连接,但 Python 扩展不会直接操纵终端启动,所以我们不会成为导致问题的人(我们唯一要做的就是在终端,但您会明显看到)。 【参考方案1】:

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

Conda 最近更改了“官方”激活环境的方法,如本期所述: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 的“正确”方法并始终使用旧的source activate name_of_env,它仍然有效(如果您的PATH 设置为包含$HOME/anaconda3/bin)。

【讨论】:

必须在提供的所有选项中执行三个才能使这项工作 --- STEP-1 --- 从 ~./bashrc export PATH="/home/dhankar/anaconda2/bin:$PATH" STEP -2 --- sudo ln -s /home/dhankar/anaconda2/etc/profile.d/conda.sh /etc/profile.d/conda.sh 删除行STEP-3---echo ". /home/dhankar/anaconda2/etc/profile.d/conda.sh" >> ~/.bashrc @RohitDhankar 第二步是做什么用的?对于 anaconda3,步骤 1 和步骤 3 仍然适用于 conda 的正确配置(但是在我的 macbook 上,anaconda3 安装在 ~/opt/anaconda3 中)。 @amka66 - 旧问题 STEP-2 是我当时会做的一些符号链接。抱歉现在不记得了。【参考方案2】:

下面的黑魔法可能会起作用:-

在我的 Big Sur 中,我在我的 settings.json 中添加了以下空条目——可以在 File(Windows)/Code(Mac)>Preferences>Settings 中找到——单击任何标有“在设置中编辑”的链接。 json"

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

一切顺利!

【讨论】:

好吧,这行得通,但为什么有必要呢?为什么 VSCode 不源 .zsh,它会运行 conda 命令并适当地设置 PATH?【参考方案3】:

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

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

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

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

【讨论】:

我承认我仍然不太了解原因。我不完全理解为什么 VSCode 不只是开始一个新的终端会话,而是从父 VSCode 会话继承环境细节。更令人困惑的是,我发现的大多数解释都是针对 pre-zsh MacOS 的。由于 ZSH 和 Bash 处理 *profile 和 *rc 文件的方式不同,我不确定这些解释中有多少仍然适用。 如果有人可以提供更好地解释问题的答案,我会将其设置为正确答案而不是我自己的答案。

以上是关于PATH 未从 VSCode 终端中的 conda activate 正确更新的主要内容,如果未能解决你的问题,请参考以下文章

python打开网页和vscode调试打开网页不一致

在Mac终端下使用conda命令提示未找到命令conda

安装Anaconda后终端测试conda命令显示"Command Not Found"

windows 修改环境变量后在 vscode 的终端不生效的解决方法

未找到 Conda 命令

鱼壳未从 bashrc 加载到路径中[关闭]