在Mac OS X上切换Python 2.7和Python 3.5

58

我通常使用Python 2.7,但最近在Mac OS X上使用Miniconda安装了Python 3.5。这两个版本的Python都已安装不同的库。现在,在终端中输入关键字“python”或“python3”会调用Python 3.5,而“python2”则返回“-bash:python2:命令未找到”。如何使用别名分别调用它们,即“python2”和“python3”?

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


1
你尝试过 python -2 吗? - TigerhawkT3
1
看起来你应该向Miniconda开一个bug报告,说明他们没有遵循PEP-0394 - Emil Vikström
3
“在它们之间切换”是什么意思?你想在需要时能够专门调用Python 2,当你想使用Python 3版本时则专门调用它吗?使用别名python2python3可以实现这个目的(如果这正是你所想要的并且你相应地编辑了你的问题,我将把它作为答案发布)。或者你想在键入“python”时切换实际运行的Python版本? - David Z
即使您能够运行python2,似乎您仍需要重新安装某些内容以适用于Python 2版本。 - Charlie Parker
7个回答

83

在我看来,在 macOS 上使用两个不同的 Python 版本,最好的方法是通过 homebrew。在 macOS 上安装 homebrew后,请在终端上运行以下命令。

brew install python@2
brew install python

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

我个人从未使用过 miniconda,但是根据文档,它看起来类似于使用 pipvirtualenv 的组合。


1
现在如何为Python2安装软件? - Charlie Parker
1
pip2安装<package_name> - forevergenin

14

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

如果你使用which python命令,它会告诉你python命令被解析到哪里。通常情况下,第三方程序会在/usr/local/bin重新定义东西(默认情况下优先于/usr/bin)。 要修复这个问题,你可以直接运行/usr/bin/python来使用2.x版本,或者找到错误的重定义位置(可能在/usr/local/bin或其他PATH中的某个地方)。


但是,我正在寻找创建别名的方法,比如使用 python2 调用 Python 2 和使用 python3 调用 Python 3。你能给我一些相关的信息吗?谢谢。 - Viswanath

5
我已经安装了Python3(via 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恢复为默认设置。

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

alias python2="/usr/bin/python"

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


2

如果您在MacOS High Sierra 10.13.5上安装了Anaconda3(Python 3.6),以下是将Python版本设置回2.7的方法。

  1. Edit the .bash_profile file in your home directory.
  2. vi $HOME/.bash_profile
  3. Comment out the line with anaconda3 addition to your PATH like this:
    # export PATH="/Users/YOURUSERNAME/anaconda3/bin:$PATH"
    
  4. Close the shell, then open it again
  5. You should now see 2.7 when you run python

如果您想要安装3.6版本的话,您可以在.bash_profile文件中取消注释anaconda3这一行。

在Mac OS X系统中尝试删除python会导致失败。

您将会得到如下结果:

unlink: /usr/bin/python: Operation not permitted

1
我只是跟进 @John Wilkey 的回答。
我的别名 python 曾经代表 python2.7(位于 /usr/bin)。 然而,现在默认的 python_path 在 python3 之前由 /usr/local/bin 开始;因此当输入 python 时,我无法获得任何 python 版本。
我尝试在 /usr/local/bin 中创建一个 python2 的链接: ln -s /usr/bin/python /usr/local/bin/
这样调用 python2 时就可以工作了。

1
如果你想使用苹果的Python 2.7系统安装版本,请注意它并不完全遵循PEP 394中规定的命名标准。
特别是,它包括了后缀为2.7的可选符号链接,而你被告知不要依赖它们,但它没有包括建议使用的后缀为2的符号链接,而你被告知应该依赖它们。
如果您想在使用苹果的Python的同时修复此问题,您可以创建自己的符号链接:
$ cd <somewhere writable and in your PATH>
$ ln -s /usr/bin/python python2

或者在您的bash配置中使用别名:

alias python2 python2.7

如果需要,您也可以对苹果的2to3、easy_install等进行类似操作。

不要尝试将这些符号链接放入/usr/bin中,绝对不要尝试重命名已有的文件或更改distutils设置为更符合PEP规范的内容。这些文件都是操作系统的一部分,并且可以被操作系统的其他部分使用,您的更改可能会在从10.13.5到10.13.6的小型更新甚至更高版本中被覆盖,因此请按照上述方法避免对它们进行更改。


或者,您可以:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接