在 Mac OS X 上的 python 2.7 和 python 3.5 之间切换

Posted

技术标签:

【中文标题】在 Mac OS X 上的 python 2.7 和 python 3.5 之间切换【英文标题】:Switch between python 2.7 and python 3.5 on Mac OS X 【发布时间】:2016-04-13 07:46:11 【问题描述】:

我通常使用 Python 2.7,但最近在 Mac OS X 上使用 Miniconda 安装了 Python 3.5。为这两个版本的 python 安装了不同的库。现在,在终端中输入关键字 'python' 或 'python3' 会调用 python 3.5,并且 'python2' 返回 '-bash: python2: command not found'。我现在如何分别使用别名“python2”和“python3”专门调用它们?

我目前正在使用 OS X El Capitan。

【问题讨论】:

你试过python -2吗? 听起来你应该用 Miniconda 打开一个错误报告,说明他们没有关注PEP-0394。 在它们之间切换是什么意思?您是否希望能够在需要时专门调用 Python 2,并在需要该版本时专门调用 Python 3?您可以使用别名python2python3 来做到这一点(如果这是您想要的并且您相应地编辑您的问题,我会将其作为答案发布)。或者您想在输入python 时切换实际运行的 Python 版本? 即使您能够运行python2,您也可能需要为 python 2 重新安装东西,看来... 【参考方案1】:

恕我直言,在 macOS 上使用两个不同 Python 版本的最佳方式是通过homebrew。在 macOS 上 installing homebrew 之后,在终端上运行以下命令。

brew install python@2
brew install python

现在您可以通过调用python2 运行Python 2.7 或通过调用python3 运行Python 3。除此之外,您还可以使用virtualenv 或pyenv 来管理不同版本的python 环境。

我从未亲自使用过miniconda,但从the documentation, 看来,它类似于使用pipvirtualenv 组合使用。

【讨论】:

现在如何为 python2 安装东西? pip2 安装 【参考方案2】:

OSX 的 Python 二进制文件(版本 2)位于 /usr/bin/python

如果你使用which python,它会告诉你python 命令被解析到哪里。通常情况下,第三方会重新定义/usr/local/bin 中的内容(默认情况下优先于/usr/bin)。要修复,您可以直接运行 /usr/bin/python 以使用 2.x 或找到错误的重新定义(可能在 /usr/local/binPATH 的其他地方)

【讨论】:

但是,我正在寻找创建别名的方法,比如 python2 调用 Python 2 和 python3 调用 Python 3。你能给我一些关于这个方向的信息吗?谢谢。【参考方案3】:

我已经安装了python3(通过miniconda3)并且需要同时安装python2,在这种情况下brew install python不会安装python2,所以你需要 brew install python@2.

现在别名 python2 指的是来自 /usr/bin/python 的 python2.x

别名python3指的是/Users/ishandutta2007/miniconda3/bin/python中的python3.x

而别名python默认指的是python3。

现在要使用python 作为python2 的别名,我将以下内容添加到.bashrc 文件中

alias python='/usr/bin/python'

要默认返回 python3,只需在需要时删除此行。

【讨论】:

【参考方案4】:

如果您在 MacOS High Sierra 10.13.5 上安装了 Anaconda3 (Python 3.6),如何将 python 版本设置回 2.7

编辑主目录中的 .bash_profile 文件。

vi $HOME/.bash_profile

散列 #export PATH="/Users/YOURUSERNAME/anaconda3/bin:$PATH"

关闭 shell 再次打开你应该在运行 python 时看到 2.7。

如果你想要 3.6,你可以简单地在你的 bash 配置文件中取消注释你的 anaconda3 行。

在 Mac OSX 中尝试取消链接 python 会以泪水告终。

你会是这样的

取消链接:/usr/bin/python:不允许操作

希望能帮助别人! :) :)

【讨论】:

【参考方案5】:

与 John Wilkey 的回答类似,我会通过查找 which python 来运行 python2,例如使用 /usr/bin/python,然后在 .bash_profile 中创建 别名

alias python2="/usr/bin/python"

我现在可以通过调用python 运行python3 和通过调用python2 运行python2。

【讨论】:

【参考方案6】:

我只是跟进@John Wilkey 的回答。

我的别名python曾经代表python2.7(位于/usr/bin)。 但是,默认的 python_path 现在前面有 /usr/local/bin 用于 python3;因此在输入python 时,我没有得到python 版本。

我尝试在/usr/local/bin 中为python2 创建一个链接:

ln -s /usr/bin/python /usr/local/bin/

在为python2 调用python 时有效。

【讨论】:

【参考方案7】:

如果您想使用 Apple 的 Python 2.7 系统安装,请注意它并不完全遵循 PEP 394 中规定的命名标准。

特别是,它包括您被告知不要依赖的带有后缀 2.7 的可选符号链接,并且不包括您被告知 应该 em> 依赖。


如果你想解决这个问题,在坚持使用 Apple 的 Python 的同时,你可以创建自己的符号链接:

$ cd <somewhere writable and in your PATH>
$ ln -s /usr/bin/python python2

或 bash 配置中的别名:

alias python2 python2.7

如果需要,您也可以对 Apple 的 2to3、easy_install 等进行同样的操作。

您不应该尝试将这些符号链接放入 /usr/bin,并且绝对不要尝试重命名已经存在的内容,或者将 distutils 设置更改为更符合 PEP 的内容。这些文件都是操作系统的一部分,并且可以被操作系统的其他部分使用,即使是从 10.13.5 到 10.13.6 或其他版本的小更新,您的更改也可能会被覆盖,因此请不要理会它们并解决它们如上所述。


或者,您可以:

只需在命令行和 shbang 等中使用 python2.7 而不是 python2。 使用虚拟环境或 conda 环境。当您始终使用激活环境的本地 python 时,全局 pythonpython3python2 等无关紧要。 正如大多数其他答案所暗示的那样,停止使用 Apple 的 2.7,而是在其旁边安装一个完整的其他 2.7。 (我不知道为什么这么多人还建议您安装第二个 3.6。这只会增加更多的混乱,没有任何好处。)

【讨论】:

以上是关于在 Mac OS X 上的 python 2.7 和 python 3.5 之间切换的主要内容,如果未能解决你的问题,请参考以下文章

在 Mac OS X 10.6 上使用带有 Python 2.7 的 Google App Engine SDK

无法在 mac os 中卸载 python 2.7

OS X 上的 Python 2.7:TypeError: 'frozenset' object is not callable on each command

Mac OS X 如何使用 多版本 Python

Mac Os 上的 nltk 语料库位置

PyGame 安装 Mac OS X