【问题标题】:external python shows up in anaconda environment外部python出现在anaconda环境中
【发布时间】:2020-04-17 00:25:56
【问题描述】:

我正在尝试按照这个简单的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?

【问题讨论】:

  • 去掉别名。虚拟环境正在尽力而为,但它无法覆盖别名。 Jupyter 不会加载 shell 的 rc 文件,因此不受别名的影响
  • which python3.8 显示什么?
  • /Library/Frameworks/Python.framework/Versions/3.8/bin/python3.8

标签: python jupyter-notebook anaconda virtualenv conda


【解决方案1】:

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

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

虚拟环境通过PATH等环境变量进行配置。这些不适用于别名。解决方案是永远不要给 python 起别名。如果您需要将其命名为其他名称,请在 PATH 中将其作为您想要的虚拟环境的符号链接。

这不适用于python的系统安装。最有可能的是,您的脚本期望将特定版本符号链接为/usr/bin/python。此时,您的虚拟环境应该取代对别名的需求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 2021-10-30
    • 2021-01-13
    • 2019-10-12
    • 2018-04-10
    • 1970-01-01
    相关资源
    最近更新 更多