外部 python 出现在 anaconda 环境中

external python shows up in anaconda environment

我正在尝试按照这个简单的 tutorial 在 anaconda 中添加不同版本的 python。我执行以下操作:

benjamins-mbp:ben ~ % conda create -n py36 python=3.6 anaconda  
benjamins-mbp:ben ~ % conda activate py36  
(py36) benjamins-mbp:ben ~ % python --version  
>>> Python 3.8.2

我希望 Python 3.6.10

但是,当我在 py36 环境中打开 Jupyter notebook 并检查 python 时,版本是正确的:

from platform import python_version
print(python_version()) 
>>> 3.6.10

我想这是因为我在 .zshrc 中创建了一个别名 ?

# Set alias for python3.8
alias python='python3.8'

(py36) benjamins-mbp:ben ~ % which python 给我 python: aliased to python3.8

为什么我可以从 py36 未安装的地方访问 python3.8?我该如何解决这个问题,以便我的虚拟环境引用其本机 python?

你几乎回答了你自己的问题。 Shell 倾向于在执行任何其他操作之前扩展别名。这就是别名的全部意义。

通常,程序在您的系统上只有一个版本,因此 alias ls='ls -al'alias rm='rm -i' 之类的东西不太可能误导您。 Python 在这方面很特别,因为它有效地鼓励在虚拟环境中在您的系统上安装多个版本(更不用说同一版本的多个副本)。

虚拟环境通过PATH等环境变量进行配置。这些不能很好地与别名一起使用。解决方案永远不会使用别名 python。如果您需要将其命名为其他名称,请在 PATH 中为您想要的虚拟环境创建一个符号链接。

这不适用于 python 的系统安装。您的脚本很可能希望将特定版本符号链接为 /usr/bin/python。此时您的虚拟环境应该不再需要别名。