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 --- 从 ~./bashrcexport 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 正确更新的主要内容,如果未能解决你的问题,请参考以下文章
安装Anaconda后终端测试conda命令显示"Command Not Found"