Homebrew:Python 3.7からPython 3.6.5.xへのロールバック?


73

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 linkbrew 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をインストールしていない人のために、醸造を経てそれを取得する方法があります:stackoverflow.com/a/51125014/760905
MartyMacGyver

Pythonバージョン3.7.1があります。多分それはあなたの問題を修正します。
-jmh

回答:


82

以前のバージョンがまだ使用可能な場合は、単に使用できます

brew switch python 3.6.5_1

1
2、3か月後に3.7に切り替える準備が整います。その日が来たら、このbrew switch ...コマンドを元に戻して3.7 に戻すにはどうすればよいですか?
ピーターベンツ

これは、Python 3.6.5に接続された仮想環境の作成とどのように違いますか?
JMH

何らかの理由で@jmhは、Homebrewを使用して3.7にアップデートしたときに3.6.5の仮想環境が壊れましたが、その理由はよくわかりません。もちろん、最初に仮想環境を作成した理由の1つは、その問題を回避するためです。元に戻すと修正されました。3.7では何も重要ではないので、当面は3.6.5にとどまります。
knilsilooc

2
上記の理由は、Pythonの組み込みvenvがシンボリックリンクを作成し、Python 3.6.xから3.7.xに移行すると壊れるということです。を使用してvenvを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を克服するためにフラグを使用し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

homebrew python 3.7.4_1では最新の依存関係であり、必要opensslではない ことに注意してopenssl@1.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-dependenciessphinxが原因で機能しない場合は、sphinxの依存関係をコメント化して、ここで説明するようにsphinxを再インストールします。pyimagesearch.com
2019/01/30

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

11

2つのオプション

以前にインストールした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をインストールするための2つの公式があります:python@2python
1つ目はPython 2用で、2つ目はPython 3用です。

注:python3 Pythonバージョン3をインストールするための式名として記載されている古い答えは、Webで見つけることができます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のレシピの更新のみを提出します。

上で説明したように、homebrewには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

homebrew-coreを永久にバックデートすることはお勧めしません。セキュリティパッチを見逃す可能性がありますが、テスト目的には役立ちます。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.