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 "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
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

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 openssl@1.1 yang merupakan ketergantungan terbaru dalam python homebrew 3.7.4_1


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.




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

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 python@3.6.x. 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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.