Homebrew: Cofanie z Python 3.7 do Python 3.6.5.x?


72

brew upgradeUaktualniony mój system Pythona do Pythona 3.7. Niestety, Python 3.7 psuje inne oprogramowanie, z którego muszę korzystać (w tym między innymi Ansible). Wyobrażam sobie, że te problemy zostaną rozwiązane w przyszłym tygodniu, ale w międzyczasie chciałbym wrócić do Pythona 3.6.5.x

A brew info pythonpokazuje, że poprzednie wersje są nadal zainstalowane i nie są czyszczone:

 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

Różne polecenia brew linki brew installpolecenia sugerowane przez inne witryny nie działają:

 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
Dla tych, którzy nie mają zainstalowanej wersji 3.6.5_1, istnieje sposób, aby uzyskać ją poprzez brew: stackoverflow.com/a/51125014/760905
MartyMacGyver

Istnieje wersja python 3.7.1. może to rozwiązuje twoje problemy.
jmh

Odpowiedzi:


82

Jeśli nadal masz dostępne poprzednie wersje, możesz po prostu użyć

brew switch python 3.6.5_1

1
Daj mi kilka miesięcy, będę gotowy na przejście do wersji 3.7. Kiedy nadejdzie ten dzień, jak cofnąć to brew switch ...polecenie, aby wrócić do wersji 3.7?
Peter Bengtsson,

Czym różni się to od tworzenia wirtualnego środowiska dołączonego do Pythona 3.6.5?
jmh

@jmh z jakiegoś powodu moje wirtualne środowiska 3.6.5 zepsuły się, gdy użyłem Homebrew do aktualizacji do wersji 3.7 i nie do końca zrozumiałem, dlaczego. Oczywiście jednym z powodów, dla których stworzyłem środowiska wirtualne, było uniknięcie tego problemu. Przełączenie z powrotem naprawiło to. Ponieważ nic w 3.7 nie jest dla mnie krytyczne, na razie trzymam się wersji 3.6.5.
knilsilooc

2
Uświadomiłem sobie, że powodem tego jest to, że wbudowana venv Pythona tworzy dowiązania symboliczne, które przerywają się, przechodząc z Pythona 3.6.x do 3.7.x. Tworzenie venv przy użyciu python3 -m venv --copies venvkopii plików Python zamiast tworzenia dowiązań symbolicznych, co zapobiega ich zerwaniu podczas aktualizacji wersji 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

Jeśli nie masz poprzedniej wersji, na którą chcesz się przełączyć, możesz zainstalować z poprzedniej formuły w ten sposób:

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

Aktualizacja 2019-10

- zawiadomienie o zależnościach -ignore

Jeśli używasz --ignore-dependenciesflagi w celu przezwyciężenia recursive dependencybłędu, może to dać następujący błąd po wykonaniu pip3 installtakiej instalacji:

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

Obejściem może być najpierw zainstalowanie jego zależności (wszystko oprócz sphinx-doc)

$ brew install pkg-config gdbm openssl readline sqlite xz

Zauważ, że potrzebuje, openssla NIE openssl@1.1 najnowszej zależności w homebrew python 3.7.4_1


1
Myślę, że przydałoby się wyjaśnienie, co brew unlink pythonrobi.
nbro

Co więcej, powinieneś podkreślić, że to najwyraźniej nie usuwa twojej obecnej wersji Python 3.7 i że później możesz wrócić do niej (używając np. Sugerowanej https://apple.stackexchange.com/a/329192/90775 ).
nbro

9
Jeśli pojawi się problem, o rekurencyjnej zależności, to można obejść poprzez ignorowanie zależności: brew install --ignore-dependencies https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb.
Eric Wiener

Jeśli --ignore-dependenciesnie działa z powodu sfinksa, skomentuj zależność w sfinksie i zainstaluj ponownie sfinksa, jak opisano tutaj: 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

Dwie opcje

Aby odzyskać wcześniej zainstalowaną wersję Pythona:

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

Użyj, brew info pythonaby zobaczyć to, co wcześniej zainstalowałeś

Aby wykonać czystą instalację Python 3.6.5, użyj:

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

Długa odpowiedź

Istnieją dwie formuły instalowania Pythona w Homebrew: python@2i python.
Pierwszy dotyczy Python 2, a drugi Python 3.

Uwaga: w Internecie można znaleźć nieaktualne odpowiedzi, w których jest on wymieniony python3jako nazwa formuły do ​​instalacji Pythona w wersji 3. Teraz jest po prostu python!

Domyślnie za pomocą tych formuł można zainstalować najnowszą wersję odpowiedniej głównej wersji Pythona. Dlatego nie można bezpośrednio zainstalować mniejszej wersji, takiej jak 3.6.

Rozwiązanie:

Za pomocą brewmożna zainstalować pakiet przy użyciu adresu formuły, na przykład w repozytorium git.

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

Lub specjalnie dla Python 3

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

Adres, który musisz podać, to adres ostatniego zatwierdzenia formuły (python.rb) dla żądanej wersji. Identyfikator comminta można znaleźć, przeglądając historię homebrew-core / Formula / python.rb

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

Python> 3.6.5

W powyższym linku nie znajdziesz formuły dla wersji Pythona powyżej 3.6.5. Po tym, jak opiekunowie tego (oficjalnego) repozytorium wydali Python 3.7, przesyłają tylko aktualizacje do receptury Python 3.7.

Jak wyjaśniono powyżej, w przypadku homebrew masz tylko Python 2 (python @ 2) i Python 3 (python), nie ma wyraźnej formuły dla Python 3.6 .

Chociaż te drobne aktualizacje są w większości przypadków nieistotne w większości przypadków i dla większości użytkowników, sprawdzę, czy ktoś opracował wyraźną formułę dla wersji 3.6.




2

Możesz tymczasowo wykonać backdate homebrew-corei ustawić HOMEBREW_NO_AUTO_UPDATEzmienną, aby utrzymywała ją w miejscu:

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

Nie polecam na stałe aktualizować homebrew-core, ponieważ przegapisz łatki bezpieczeństwa, ale jest to przydatne do celów testowych.

Możesz również wyodrębnić stare wersje formuł homebrew do własnego kranu (właściciel_kapu / nazwa_kapu) za pomocą brew extractpolecenia:

brew extract python tap_owner/tap_name --version=3.6.5

Wykonanie własnego kranu lub znalezienie osoby, która zautomatyzowała obsługę 3.6 i innych serii z aktualizacjami, jest zdecydowanie najlepszym sposobem. Jeśli zrobią to poprawnie, możesz mieć w pełni kwalifikowaną wersję i połączyć ją z brew link python@3.6.x. Ale pyenvjest też inna opcja.
dragon788

-1

Nie jestem ekspertem w tej dziedzinie, ale miałem ten sam problem. Oto, co zadziałało dla mnie: $ 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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.