自制软件:从Python 3.7还原到Python 3.6.5.x?


72

一个brew upgrade我的系统的Python升级到Python 3.7。不幸的是,Python 3.7破坏了我需要使用的其他软件(包括但不限于Ansible)。我想这些问题将在下个星期左右解决,但与此同时,我想回滚到Python 3.6.5.x

A brew info python显示仍安装了先前版本,但尚未清除:

 brew info python
python: stable 3.7.0 (bottled), HEAD
Interpreted, interactive, object-oriented programming language
https://www.python.org/
/usr/local/Cellar/python/3.6.5 (4,825 files, 100.8MB)
  Poured from bottle on 2018-03-31 at 20:21:57
/usr/local/Cellar/python/3.6.5_1 (4,788 files, 99.9MB)
  Poured from bottle on 2018-06-20 at 16:00:26
/usr/local/Cellar/python/3.7.0 (4,869 files, 103.3MB)
  Poured from bottle on 2018-07-01 at 19:30:37
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/python.rb

各种brew link并且brew install似乎被其他网站提示命令不工作:

 brew link python@3.6.5
Error: No such keg: /usr/local/Cellar/python@3.6.5
 brew link python@3.6.5_1
Error: No such keg: /usr/local/Cellar/python@3.6.5_1
 brew install python@3.6.5
Error: No available formula with the name "python@3.6.5" 
==> Searching for a previously deleted formula (in the last month)...
Error: No previously deleted formula found.
==> Searching for similarly named formulae...
==> Searching local taps...
Error: No similarly named formulae found.
==> Searching taps...
==> Searching taps on GitHub...
Error: No formulae found in taps.

10
对于未安装3.6.5_1的用户,有一种方法可以通过brew获得:stackoverflow.com/a/51125014/760905
MartyMacGyver '18

有python版本3.7.1。也许可以解决您的问题。
jmh

Answers:


82

如果您仍然可以使用以前的版本,则可以使用

brew switch python 3.6.5_1

1
给我几个月,我准备切换到3.7。那天到来时,如何撤消该brew switch ...命令以回到3.7?
彼得·本格森

这与创建附加到Python 3.6.5的虚拟环境有何不同?
jmh

@jmh由于某种原因,当我使用Homebrew更新到3.7时,我的3.6.5虚拟环境崩溃了,我还不太清楚为什么。当然,我之所以创建虚拟环境是出于避免该问题的原因之一。切换回固定它。由于3.7中的任何内容对我来说都不重要,因此我暂时仍坚持使用3.6.5。
knilsilooc

2
我意识到上述原因是因为Python的内置venv创建了符号链接,当从Python 3.6.x升级到3.7.x时,符号链接会中断。使用venvs python3 -m venv --copies venv复制Python文件而不是创建符号链接,这样可以防止它们在升级Python版本时损坏。
knilsilooc

8
Error: python does not have a version "3.6.5_1" in the Cellar. python installed versions: 3.7.0
mrgloom

51

如果您没有要切换到的先前版本,则可以通过以下方式从先前的公式进行安装:

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

更新2019-10

--ignore-dependencies通知

如果您使用--ignore-dependencies标志来克服recursive dependency错误,那么在完成pip3 install此类安装后,可能会出现以下错误:

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

解决方法可能是先安装其依赖项(除外sphinx-doc

$ brew install pkg-config gdbm openssl readline sqlite xz

请注意,它需要opensslNOT openssl@1.1,这是自制python 3.7.4_1中的最新依赖项


1
我认为如果您也解释一下会有用brew unlink python
nbro

此外,您应该强调,这显然不会删除当前的Python 3.7版本,以后您可以切换回它(使用例如建议的https://apple.stackexchange.com/a/329192/90775)。
nbro

9
如果您遇到有关递归依赖性的问题,可以通过忽略依赖性来绕过此问题:brew install --ignore-dependencies https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb
埃里克·维纳

如果--ignore-dependencies不因工作狮身人面像,注释掉依赖的狮身人面像和这里描述重装斯芬克斯:pyimagesearch.com/2019/01/30/...
thadk

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

11

两种选择

要恢复以前安装的Python版本:

brew switch python 3.x.x_x # Ex. 3.6.5_1

使用brew info python看你以前已经安装了什么

要进行Python 3.6.5的全新安装,请使用:

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

长答案

使用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

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

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

虽然这些次要更新在大多数情况下和对于大多数用户而言都是无关紧要的,但我将搜索是否有人对3.6做过明确的公式。




2

您可以暂时回溯日期homebrew-core并设置HOMEBREW_NO_AUTO_UPDATE变量以将其保留在适当的位置:

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

我不建议永久回溯自制内核的日期,因为您会错过安全补丁,但这对于测试目的很有用。

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

brew extract python tap_owner/tap_name --version=3.6.5

自行开发或寻找可以自动维护3.6和其他系列更新的人员,绝对是最好的选择。如果他们做得正确,您可以使用完全限定的版本并将其链接到brew link python@3.6.x。虽然pyenv也是另一种选择。
dragon788

-1

我不是这方面的专家,但是有同样的问题。这对我有用: $ brew unlink python $ brew uninstall --ignore-dependencies python3 $ brew uninstall pipenv then from https://www.python.org/downloads/ installed python 3.6.6 $ brew install pipenv

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.