在 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?您可以使用别名python2
和python3
来做到这一点(如果这是您想要的并且您相应地编辑您的问题,我会将其作为答案发布)。或者您想在输入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, 看来,它类似于使用pip
和virtualenv
组合使用。
【讨论】:
现在如何为 python2 安装东西? pip2 安装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。你能给我一些关于这个方向的信息吗?谢谢。【参考方案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
时,全局 python
、python3
、python2
等无关紧要。
正如大多数其他答案所暗示的那样,停止使用 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
OS X 上的 Python 2.7:TypeError: 'frozenset' object is not callable on each command