如何使用Homebrew在Mac上安装Python 2和3?


146

我需要能够在Python 2和3之间来回切换。如何使用Homebrew做到这一点,因为我不想弄乱路径并遇到麻烦。现在,我通过Homebrew安装了2.7。


你可能想改变的问题,除去自制引用,因为它是不是一定要达成你的目标要求(见我的回答如下例如stackoverflow.com/a/49091638/2923369
马特Schlobohm

Answers:


288

我会用pyenv您可以安装它:

$ brew install pyenv

要在您的Bash shell中启用pyenv,您需要运行:

$ eval "$(pyenv init -)"

要在启动时自动为Bash执行此操作,请将该行添加到您的中~/.bash_profile1个

用法:

安装并激活pyenv后,您可以安装不同版本的python并选择可以使用的版本。例:

$ pyenv install 2.7.5

您可以检查已安装的版本:

$ pyenv versions

您可以使用以下命令在python版本之间进行切换:

$ pyenv global 3.3.1

您还可以使用以下命令为当前目录设置python版本:

$ pyenv local 3.5.2

您可以通过运行python --version以下命令进行检查:

$ python --version
Python 3.5.2

1 Homebrew曾经指示您在安装pyenv时执行此操作,但是该消息已删除。对于Zsh和其他Shell,精确步骤可能有所不同。


这是最简单的解决方案。我目前使用它在Python 3和2.7.x之间切换
Naz Mir

3
如果我已经通过homebrew安装了python 2.7 ,是否应该使用pyenv进行任何维护?我可以通过pyenv安装另一个python 2.7 吗?
Drake Guan

3
是的,您可以通过pyenv安装另一个python 2.7。它将在$ PYENV_ROOT / versions中安装该python。当您执行“ pyenv版本”时,通过自制软件安装的其他python 2.7可能会显示为“系统”。
moliware

5
我必须添加eval "$(pyenv init -)"到.profile / .zshrc才能使pyenv工作。
罗默2015年

5
@ilciavo,您可能必须将其添加eval "$(pyenv init -)"到〜/ .bash_profile中
Jojanzing '16

77

您可以同时安装两个版本。

对于Homebrew> = 1.5.0:

自2018年3月1日起,该python公式将升级到Python 3.x,同时python@2专门为Python 2.7添加一个新公式。

在此处查看更改公告,或在此处查看有关将Homebrew用于Python最终文档

对于较早的自制软件:

对于Python 2.x:

brew install python

对于Python 3.x:

brew install python3

现在,您将在计算机中同时安装两个版本。当您要使用版本2时,请使用python可执行文件。当您要使用版本3时,请使用python3可执行文件。


问题是关于两者都使用
meduz

感谢更新!我遵循了类似的路线,但是PYTHONPATH在每次更改时都遇到了问题...有什么想法吗?除此之外,pyenv很棒。
meduz

9
另外,请注意,python2和python3并排放置,python指向python2,而python3则指向python3。但是,一个大问题是pip并不像您期望的那样指向pip2。它实际上指向pip3(显然pip3也是如此)。要使用pip2,请显式使用pip2。具有用于蟒点非编号后缀2但非数字后缀为PIP点3.一个位不一致
JD

5
这弄乱了像pip这样的常见可执行文件。在这种情况下,python3将覆盖python2 pip,这将是默认的“ pip”命令
kissgyorgy

1
回应@kissgyorgy的评论:我遇到了这个问题,对此问题的最后评论为我解决了github.com/Homebrew/legacy-homebrew/issues/50607python3 -m pip install -U --force-reinstall pip然后运行,然后python -m pip install -U --force-reinstall pip回头pip看一下Python 2 pip
哈里

11

当前,Homebrew为Python 2和3提供了两个不同的公式。brew install python安装python3,然后brew install python@2安装python2。Homebrew文档中的更多详细信息:

https://docs.brew.sh/Homebrew-and-Python

如果您当前通过Homebrew安装了2.x,Homebrew会给您以下消息:

Error: python 2.7.14 is already installed
To upgrade to 3.6.5, run `brew upgrade python`

如果您运行:

brew upgrade python

您应该能够:

python --version

python3 --version

查看安装了什么版本的Python 2.x和3.x。


6

另外,您可能只需输入“ python3”来运行最新版本的python3.x,然后输入“ python”或“ python2”来运行最新安装的2.x版本。


4

有两种方法都可以使用,但是今天最简单的解决方案是使用pyenv。pyenv允许在版本之间轻松切换。这是我要做的设置:

第1步:

从Mac移除所有python

 brew uninstall --ignore-dependencies --force python
 sudo rm -rf ~/miniconda3/
 sudo rm -rf ~/.conda/

从以下内容删除 ~/.bash_profile

export PATH="/Users/ishandutta2007/miniconda3/bin:$PATH"

还有以下内容 ~/.bashrc

export PYTHONPATH=/usr/local/lib/python2.7/site-packages:$PYTHONPATH
export PYTHONPATH=/usr/local/lib/python2.7/site-packages/google:$PYTHONPATH
alias python="/usr/bin/python"

第2步

安装pyenv和所需的python版本

brew update
brew install pyenv
pyenv install 2.7
pyenv install 3.7.0

第三步

添加pyenv initbash_profilebashrc

echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bash_profile

第4步

检查安装了什么

pyenv versions
  • 系统(由/Users/ishandutta2007/.pyenv/version设置)

    2.7

    3.7.0

第5步:

选择一个默认值

pyenv global 3.7.0

当项目需要较旧的版本时,只需转到其根文件夹并运行

pyenv local 2.7

1

使用asdf

asdf的民谣

曾经有一种编程语言,
它有许多版本,
所以人们为它编写了一个版本管理器,以便
在项目的版本之间进行切换
,包括新旧版本。

然后出现了更多的编程语言,
所以出现了更多的版本管理器
以及许多针对他们的命令

我安装了很多,
我学到了很多命令

然后我说,
我将再写一个版本管理器

因此,出现了另一个版本管理器
asdf版本管理-https : //github.com/asdf-vm/asdf

版本管理器可扩展
,任何人都可以为其创建插件
以支持自己喜欢的语言,而
无需再安装更多版本管理器
或学习更多命令

https://github.com/asdf-vm/asdf
https://github.com/tuvistavie/asdf-python
https://github.com/asdf-vm/asdf-plugins


在我看来,这些不是竞争性工具,而是同一工具,每种语言实施一次(有时不止一次)。有点像为什么我们也需要像LSP这样的东西,恕我直言。microsoft.github.io/language-server-protocol/overview
Matt Schlobohm

1

我以为我有相同的要求-在Python版本之间移动-但是通过从源代码构建而不是使用Python3.6实现了我所需的一切homebrew

git clone https://git.<theThingYouWantToInstall>

根据存储库,检查是否已经为该选项设置了MAKE文件。



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.