外部 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
。此时您的虚拟环境应该不再需要别名。
我正在尝试按照这个简单的 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
。此时您的虚拟环境应该不再需要别名。