如何使用自制程序在 macOS 中安装之前版本的 Python3?

如何使用 brew 在 macOS 中安装以前版本的 Python3?

使用 brew install python命令,我得到了 Python 3的最新版本(目前为3.7.0) ,但是我想要 Python 3.6的最新版本(目前为3.6.5)。

我已经阅读了另一个包 pyenv,可以帮助处理不同的 Python 安装,但这个解决方案不适合我。

178291 次浏览

简短的回答

要全面安装 Python 3.6.5,请使用:

brew unlink python # ONLY if you have installed (with brew) another version of python 3
brew install --ignore-dependencies https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb

如果您希望恢复以前安装的版本,那么:

brew info python           # To see what you have previously installed
brew switch python 3.x.x_x # Ex. 3.6.5_1

长答案

有两个公式可用于使用 Homebrew 安装 Python: python@2python
第一个是针对 Python2的,第二个是针对 Python3的。

注意: 你可以在网上找到过时的答案,其中提到 python3作为安装 Python 版本3的公式名称。现在只剩下 python了!

默认情况下,使用这些公式可以安装相应的主版本 Python 的最新版本。因此,您不能直接安装3.6这样的次要版本。

解决方案

使用 brew,您可以使用公式的地址安装包,例如在 git 存储库中。

brew install https://the/address/to/the/formula/FORMULA_NAME.rb

或者特别针对 Python 3

brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/COMMIT_IDENTIFIER/Formula/python.rb

您必须指定的地址是公式(python.rb)最后一次提交所需版本的地址。 您可以通过查看 home-core/惯例/python.rb 的历史记录来找到这个提交标识符

Https://github.com/homebrew/homebrew-core/commits/master/formula/python.rb

Python > 3.6.5

在上面的链接中,您将找不到3.6.5以上版本的 Python 的公式。 在那个(官方)存储库的维护者发布 Python 3.7之后,他们只提交对 Python 3.7配方的更新。

如上所述,在自制程序中,只有 Python 2(Python@2)和 Python 3(Python) Python 3.6没有黎曼显式公式

尽管这些小的更新在大多数情况下对大多数用户来说都是无关紧要的,我还是会搜索一下是否有人为3.6版本做过黎曼显式公式。

为了用 homebrew解决这个问题,你可以暂时回溯 homebrew-core并设置 HOMEBREW_NO_AUTO_UPDATE变量使其保持在适当的位置:

cd `brew --repo homebrew/core`
git checkout f2a764ef944b1080be64bd88dca9a1d80130c558
export HOMEBREW_NO_AUTO_UPDATE=1
brew install python

我不建议永久回溯自制核心,因为你会错过安全补丁,但它是有用的测试目的。

您还可以使用 brew extract命令将自制公式的旧版本提取到您自己的自来水(click _ owner/take _ name)中:

brew extract python tap_owner/tap_name --version=3.6.5

作为更新,当做

brew unlink python # If you have installed (with brew) another version of python
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb

你可能会遇到

Error: python contains a recursive dependency on itself:
python depends on sphinx-doc
sphinx-doc depends on python

若要绕过它,请添加 --ignore-dependencies参数以进行酿造安装。

brew unlink python # If you have installed (with brew) another version of python
brew install --ignore-dependencies https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb

我所做的是首先安装 python 3.7,然后使用以下命令解除它的链接

brew install python3
brew unlink python

然后我使用从上面的答案中获得的以下命令安装了 python3.6.5。

brew install --ignore-dependencies https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb --ignore-dependencies

之后,我运行以下命令

brew link --overwrite python

现在系统里有了所有的蟒蛇,查找 run

mian@tdowrick2~ $ python --version
Python 2.7.10
mian@tdowrick2~ $ python3.7 --version
Python 3.7.1
mian@tdowrick2~ $ python3.6 --version
Python 3.6.5

创建 Python 3.7虚拟环境。

mian@tdowrick2~ $ virtualenv -p python3.7 env
Already using interpreter /Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7
Using base prefix '/Library/Frameworks/Python.framework/Versions/3.7'
New python executable in /Users/mian/env/bin/python3.7
Also creating executable in /Users/mian/env/bin/python
Installing setuptools, pip, wheel...
done.
mian@tdowrick2~ $ source env/bin/activate
(env) mian@tdowrick2~ $ python --version
Python 3.7.1
(env) mian@tdowrick2~ $ deactivate

创建 Python 3.6虚拟环境

mian@tdowrick2~ $ virtualenv -p python3.6 env
Running virtualenv with interpreter /usr/local/bin/python3.6
Using base prefix '/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6'
New python executable in /Users/mian/env/bin/python3.6
Not overwriting existing python script /Users/mian/env/bin/python (you must use /Users/mian/env/bin/python3.6)
Installing setuptools, pip, wheel...
done.
mian@tdowrick2~ $ source env/bin/activate
(env) mian@tdowrick2~ $ python --version
Python 3.6.5
(env) mian@tdowrick2~ $ deactivate

我尝试了以上所有的方法来安装 Python 3.4.4。Python 的安装工作,但 PIP 不会被安装,我可以做任何事情使它工作。我使用的是 Mac OSX Mojave,它会导致 zlib,openssl 的一些问题。

不要做什么:

  • 尽量避免在公式 巨蟒蟒蛇3给出的以前版本中使用 Homebrew。
  • 不要尝试编译 巨蟒

解决方案:

  1. 下载 64位安装程序64位/32位安装程序: https://www.python.org/downloads/release/python-365/
  2. 在前面的步骤中,它将下载 Python 3.6.5,例如,如果您想下载 Python 3.4.4,则将 巨蟒 -365上面的 URL 替换为 巨蟒 -344
  3. 下载时点击下载的文件即可打开 GUI 安装程序
  4. 如果你下载了 巨蟒 -365,在安装后,启动这个版本的 python,你将输入你的终端 蟒蛇365,同样的事情为 pip,它将是 Pip365

附言: 您不必在系统上卸载其他版本的 Python。


编辑:


我找到了一个更好的解决方案,可以在 MacOSX、 Windows、 Linux 等平台上运行。

  1. 是否已经安装了 python 并不重要。
  2. 下载 水蟒
  3. 一旦安装,终端类型: conda init
  4. 在终端中,使用 任何 python 版本创建虚拟环境,例如,我选择了3.4.4: conda create -n [NameOfYour VirtualEnvironment] python=3.4.4
  5. 然后,在终端中,您可以使用以下命令检查已经创建的所有虚拟环境: conda info --envs
  6. 然后,在终端中,用 conda activate [The name of your virtual environment that was shown with the command at step 5]激活您选择的虚拟环境

我什么都试过了,但是都不行。最后,我已经使用 pyenv和它的工作直接喜欢一个魅力。

因此,安装了 homebrew之后,只需要:

brew install pyenv
pyenv install 3.6.5

管理虚拟世界:

brew install pyenv-virtualenv
pyenv virtualenv 3.6.5 env_name

有关更多信息,请参见 PenenvPyenv-viralenv

编辑(2020/03/19)

我发现使用 安装程式比自制软件更容易直接安装 pyenv 和 pyenv-viralenv:

curl https://pyenv.run | bash

要管理 python 版本,可以全局管理:

pyenv global 3.6.5

或在给定目录中的本地:

pyenv local 3.6.5

以防有人遇到下面这样的问题

pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

根本原因是 openssl 1.1不再支持 python 3.6,因此需要安装旧版本的 openssl 1.0

解决办法是:

brew uninstall --ignore-dependencies openssl
brew install https://github.com/tebelorg/Tump/releases/download/v1.0.0/openssl.rb

对我来说最简单的方法是安装 Anaconda: https://docs.anaconda.com/anaconda/install/

在那里,我可以用不同的 Python 版本创建尽可能多的环境,然后通过鼠标单击在它们之间切换。再简单不过了。

要安装不同的 Python 版本,只需遵循以下说明 https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-python.html

使用不同 Python 版本的新开发环境在2分钟内完成。在未来,我可以很容易地来回切换。