Homebrew: Kembalikan dari Python 3.7 ke Python 3.6.5.x?

73

Sistem brew upgradesaya ditingkatkan Python ke Python 3.7. Sayangnya, Python 3.7 merusak perangkat lunak lain yang perlu saya gunakan (termasuk tetapi tidak terbatas pada Ansible). Saya membayangkan masalah ini akan teratasi pada minggu depan, tetapi sementara itu, saya ingin mengembalikan ke Python 3.6.5.x

A brew info pythonmenunjukkan bahwa versi sebelumnya masih diinstal dan tidak dibersihkan:

 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

Berbagai brew linkdan brew installperintah yang disarankan oleh situs lain sepertinya tidak berfungsi:

 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 "[email protected]" 
==> 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.
tanah liat
sumber
10
Bagi yang belum memasang 3.6.5_1, ada cara untuk mendapatkannya melalui minuman: stackoverflow.com/a/51125014/760905
MartyMacGyver
Ada versi python 3.7.1. mungkin itu memperbaiki masalah Anda.
jmh

Jawaban:

82

Jika Anda masih memiliki versi sebelumnya yang tersedia, Anda bisa menggunakannya

brew switch python 3.6.5_1
knilsilooc
sumber
1
Beri saya beberapa bulan saya akan siap untuk beralih ke 3.7. Ketika hari itu tiba, bagaimana cara membatalkan brew switch ...perintah ini untuk kembali ke 3.7?
Peter Bengtsson
Apa bedanya dengan menciptakan lingkungan virtual yang melekat pada Python 3.6.5?
jmh
@ jmh untuk beberapa alasan 3.6.5 lingkungan virtual saya rusak ketika saya menggunakan Homebrew untuk memperbarui ke 3.7, dan saya belum tahu mengapa. Tentu saja, salah satu alasan saya membuat lingkungan virtual pada awalnya adalah untuk menghindari masalah itu. Beralih kembali memperbaikinya. Karena tidak ada dalam 3,7 yang penting bagi saya, saya hanya bertahan dengan 3.6.5 untuk saat ini.
knilsilooc
2
Saya menyadari bahwa alasan di atas adalah bahwa venv bawaan Python menciptakan symlink, yang pecah ketika beralih dari Python 3.6.x ke 3.7.x. Membuat venvs dengan python3 -m venv --copies venvmenyalin file Python alih-alih membuat symlink, yang mencegahnya pecah saat memutakhirkan versi Python Anda.
knilsilooc
8
Error: python does not have a version "3.6.5_1" in the Cellar. python installed versions: 3.7.0
mrgloom
51

Jika Anda tidak memiliki versi sebelumnya untuk beralih, Anda dapat menginstal dari rumus sebelumnya dengan cara ini:

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

Perbarui 2019-10

--ignore-dependency notice

Jika Anda menggunakan --ignore-dependenciesflag untuk mengatasi recursive dependencykesalahan, itu mungkin memberi Anda kesalahan berikut ketika Anda melakukannya pip3 installsetelah instalasi tersebut:

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

Solusinya adalah menginstal dependensinya terlebih dahulu (kecuali semuanya sphinx-doc)

$ brew install pkg-config gdbm openssl readline sqlite xz

Perhatikan bahwa ini perlu openssldan BUKAN [email protected] yang merupakan ketergantungan terbaru dalam python homebrew 3.7.4_1

rinat.io
sumber
1
Saya pikir itu akan berguna jika Anda juga menjelaskan apa yang brew unlink pythondilakukannya.
nbro
Selain itu, Anda harus menekankan bahwa ini tampaknya tidak menghapus versi Python 3.7 Anda saat ini, dan nanti Anda dapat beralih kembali ke sana (menggunakan mis. Apa yang disarankan https://apple.stackexchange.com/a/329192/90775 ).
Nbro
9
Jika Anda mendapatkan masalah tentang ketergantungan rekursif, ini dapat dilewati dengan mengabaikan dependensi: brew install --ignore-dependencies https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb.
Eric Wiener
Jika --ignore-dependenciestidak berfungsi karena sphinx, beri komentar tentang ketergantungan pada sphinx dan instal ulang sphinx seperti dijelaskan di sini: 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

Dua pilihan

Untuk memulihkan versi Python yang sebelumnya diinstal:

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

Gunakan brew info pythonuntuk melihat apa yang telah Anda instal sebelumnya

Untuk melakukan instalasi Python 3.6.5 yang bersih, gunakan:

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

Jawaban panjang

Ada dua rumus untuk menginstal Python dengan Homebrew: python@2dan python.
Yang pertama adalah untuk Python 2 dan yang kedua untuk Python 3.

Catatan: Anda dapat menemukan jawaban yang sudah kadaluwarsa di web yang disebut python3sebagai nama rumus untuk menginstal Python versi 3. Sekarang sudah cukup python!

Secara default, dengan rumus ini Anda dapat menginstal versi terbaru dari versi utama Python yang sesuai. Jadi, Anda tidak dapat langsung menginstal versi minor seperti 3.6.

Larutan:

Dengan brew, Anda dapat menginstal paket menggunakan alamat rumus, misalnya dalam repositori git.

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

Atau khusus untuk Python 3

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

Alamat yang harus Anda tentukan adalah alamat ke komit terakhir dari rumus (python.rb) untuk versi yang diinginkan. Anda dapat menemukan pengidentifikasi commint dengan melihat sejarah homebrew-core / Formula / python.rb

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

Python> 3.6.5

Di tautan di atas Anda tidak akan menemukan formula untuk versi Python di atas 3.6.5. Setelah pengelola repositori (resmi) itu merilis Python 3.7, mereka hanya mengirimkan pembaruan ke resep Python 3.7.

Seperti dijelaskan di atas, dengan homebrew Anda hanya memiliki Python 2 (python @ 2) dan Python 3 (python), tidak ada rumus eksplisit untuk Python 3.6 .

Meskipun sebagian besar pembaruan kecil itu tidak relevan dalam banyak kasus dan untuk sebagian besar pengguna, saya akan mencari apakah seseorang telah melakukan formula eksplisit untuk 3.6.

ePi272314
sumber
1
github.com/sashkab/homebrew-python tampaknya melakukannya
Grasshopper
2

Anda dapat memutakhirkan sementara waktu homebrew-coredan mengatur HOMEBREW_NO_AUTO_UPDATEvariabel untuk menahannya:

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

Saya tidak merekomendasikan homebrew-core backdating secara permanen, karena Anda akan kehilangan patch keamanan, tetapi ini berguna untuk tujuan pengujian.

Anda juga dapat mengekstrak versi rumahan rumahan lama ke dalam tap Anda sendiri (tap_owner / tap_name) menggunakan brew extractperintah:

brew extract python tap_owner/tap_name --version=3.6.5
Steven Peters
sumber
Membuat ketukan Anda sendiri atau menemukan seseorang yang telah secara otomatis mengelola 3.6 dan seri lain dengan pembaruan jelas merupakan cara terbaik untuk melakukannya. Jika mereka melakukannya dengan benar, Anda dapat memiliki versi yang sepenuhnya memenuhi syarat dan menautkannya brew link [email protected]. Padahal pyenvada pilihan lain juga.
dragon788
-1

Saya bukan ahli dalam hal ini, tetapi memiliki masalah yang sama. Inilah yang bekerja untuk saya: $ 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

Becky
sumber