如何使用自制软件在 macOS 中安装以前版本的 Python 3?

Posted

技术标签:

【中文标题】如何使用自制软件在 macOS 中安装以前版本的 Python 3?【英文标题】:How can I install a previous version of Python 3 in macOS using homebrew? 【发布时间】:2018-12-10 00:32:54 【问题描述】:

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

使用命令brew install python 我获得了最新版本的 Python 3(当前为 v3.7.0),但我想要最新版本的 Python 3.6(当前为 3.6.5)。

我读过另一个包pyenv 可以帮助处理不同的python 安装,但是这个解决方案不适合我。

【问题讨论】:

不管怎样,Homebrew 对多个 Python 版本的支持非常糟糕,而且越来越差。我建议您完全避免使用 Homebrew 来安装 Python。 Python.org 提供了macOS install packages for various versions of Python,它可以彼此并排安装(如果需要,也可以与 Homebrew Python 安装并排安装)。从长远来看,无论是使用这些软件包还是使用像 pyenv 这样的工具,最终都会为您省去很多麻烦。 @DanielPryden imo pyenv 应该推荐在去网站手动下载安装之前。已经使用自制软件的人可能正在寻找一个不错的命令行解决方案。对于在此处滚动的任何人,请向下滚动:***.com/a/60189988/4600952 【参考方案1】:

简答

要全新安装 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。 第一个用于 Python 2,第二个用于 Python 3。

注意:您可以在网上找到过时的答案,其中提到 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) 的最后一次提交的地址。 您可以通过查看 homebrew-core/Formula/python.rb 的历史记录找到 commint 标识符

https://github.com/Homebrew/homebrew-core/commits/master/Formula/python.rb

Python > 3.6.5

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

如上所述,使用自制软件只有 Python 2 (python@2) 和 Python 3 (python),Python 3.6 没有明确的公式

虽然这些小更新在大多数情况下和大多数用户都无关紧要,但我会搜索是否有人为 3.6 做了明确的公式。

【讨论】:

这将如何影响 Homebrew 中依赖默认 python3 解释器的包或与之交互? 在任何情况下,依赖 Python 的应用程序(无论是否安装了 brew)都会在应用程序路径中查找 python3 可执行文件,并且您将让 python3 指向 python3.6。因此,您的默认 Python 3 将是 3.6(如果您使用上面的示例),这就足够了。 Python 3.7 太新了;我怀疑是否存在明确需要 Python 3.7 的应用程序,同样,我不知道任何仅适用于 Python 3.6 的应用程序。换一种说法。你会没事的:) 我已安装 3.7 并收到此错误:Error: python 3.7.0 is already installed To install 3.6.5_1, first run brew unlink python`` 使用“简短答案”时。 感谢您提供 3.6.5 的直接提交链接。你把我从绝望的境地中救了出来。 我知道这有点老,但我正在努力弄清楚你是如何获得公式的链接的。目前3.6的版本是3.6.7,有没有什么简单的方法可以找到这个公式?【参考方案2】:

作为更新,做的时候

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 install。

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

【讨论】:

然后你就会有一个依赖地狱的噩梦......就像discourse.brew.sh/t/brew-install-python3-fails/1756/7 起初这对我不起作用;基本上必须这样做: brew install --debug --ignore-dependencies raw.githubusercontent.com/Homebrew/homebrew-core/… 并且一旦它在 make html 中失败,只需通过选择 2) 来忽略错误。 html/docs 失败可能会在以后咬我,但现在它工作正常:耸耸肩:【参考方案3】:

我已经尝试了所有方法,但无法成功。最后我使用了pyenv,它就像一个魅力一样直接起作用。

所以安装了homebrew,就可以了:

brew install pyenv
pyenv install 3.6.5

管理虚拟环境:

brew install pyenv-virtualenv
pyenv virtualenv 3.6.5 env_name

请参阅pyenv 和pyenv-virtualenv 了解更多信息。

编辑 (2020/03/19)

我发现使用 pyenv-installer 比 homebrew 更容易安装 pyenv 和 pyenv-virtualenv 目录:

curl https://pyenv.run | bash

全局管理 python 版本:

pyenv global 3.6.5

或在给定目录中本地:

pyenv local 3.6.5

【讨论】:

这实际上不是直接回答问题,而是通过virtualenv 的方法绕过它。 其实 virtualenv 是没有必要的。 pyenv 让您无需使用 venv 即可管理 python 版本 我想这是大多数情况下最好的解决方案【参考方案4】:

我首先安装了 python 3.7,然后使用以下命令取消链接

brew install python3
brew unlink python

然后我使用从上述答案中获取的以下命令安装了 python 3.6.5。

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

之后我运行了以下命令

brew link --overwrite python

现在我在系统中有所有的蟒蛇。找出运行

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 -V && python3.7 -V && python3 -V && python3.6 -VPython 2.7.15 Python 3.7.3 Python 3.7.3 zsh: command not found: python3.6 仔细看我的回答,对于 3.6 你必须写 python3.6 -V。你已经完成了两次python3 -V 这就是为什么你得到了两次3.7.3 而错过了3.6 对我来说,这会将python3.6 隐藏在/usr/local/Cellar/python/3.6.5_1/bin 下。一旦我建立了一个链接,它就像你说的那样工作。这个 python 自我管理系统似乎是一百万程序员通过布朗运动编码的 rube goldberg 分形。【参考方案5】:

我尝试了以上所有答案来安装 Python 3.4.4。 python的安装工作,但不会安装PIP,我无能为力让它工作。我使用的是 Mac OSX Mojave,这会导致 zlib、openssl 出现一些问题。

不该做什么:

尽量避免将 Homebrew 用于公式 PythonPython3 给出的旧版本。 不要尝试编译Python

解决方案:

    下载ma​​cOS 64位安装程序ma​​cOS 64位/32位安装程序:https://www.python.org/downloads/release/python-365/ 上一步会下载Python 3.6.5,例如你要下载Python 3.4.4,在上面的url中替换 python-344 的 python-365 Download 单击您下载的文件,GUI 安装程序将打开 如果你下载了python-365,安装后,要启动这个版本的python,你需要在终端输入python365,pip也是一样,它会是pip365

p.s:您不必在系统上卸载其他版本的 Python。


编辑:


我发现了一个更好的解决方案,适用于 MacOSX、Windows、Linux 等。

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

【讨论】:

这对我有用.. 在 mac catalina.. 我有 3.9 和 3.7.. 通过第一种方法安装 3.6.5.. 现在唯一的区别是启动这个版本的 python,你将输入你的终端 python3.6,pip 也是一样的,它将是 pip3.6 你也可以通过以下方式检查安装:- python3.6 --version 对于任何查看 2021-12-07 的人来说,conda 方式是对我个人有用的最好也是唯一的方式。【参考方案6】:

万一有人遇到像下面这样的点子问题

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

【讨论】:

【参考方案7】:

要使用homebrew 解决此问题,您可以暂时回溯homebrew-core 并设置HOMEBREW_NO_AUTO_UPDATE 变量以将其固定到位:

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

我不建议永久回溯 homebrew-core,因为您会错过安全补丁,但它对于测试目的很有用。

您还可以使用brew extract 命令将旧版本的自制公式提取到您自己的tap (tap_owner/tap_name) 中:

brew extract python tap_owner/tap_name --version=3.6.5

【讨论】:

如何计算给定包的 tap_owner 和 tap_name?【参考方案8】:

对我来说最简单的方法是安装 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 分钟内完成。而且以后我可以轻松地来回切换。

【讨论】:

以上是关于如何使用自制软件在 macOS 中安装以前版本的 Python 3?的主要内容,如果未能解决你的问题,请参考以下文章

如何在macos中用librtmp编译ffmpeg?

如何在Linux中安装Visual Studio Code

如何冻结仅在虚拟环境中安装的软件包?

在 MacOS 中安装 gcutil 时收到错误

如何使用 homebrew 在 MACOS 中安装 node.js

无法在 macOS Monterey 版本 12.0 Beta 中安装 Cocoapods - Xcode 13.0(13A233)