如何使用自制软件在 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@2
和 python
。
第一个用于 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 -V
Python 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 用于公式 Python 或 Python3 给出的旧版本。 不要尝试编译Python解决方案:
-
下载macOS 64位安装程序或macOS 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?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 homebrew 在 MACOS 中安装 node.js
无法在 macOS Monterey 版本 12.0 Beta 中安装 Cocoapods - Xcode 13.0(13A233)