Jak mogę zainstalować poprzednią wersję Pythona 3 w macOS przy użyciu homebrew?


137

Jak mogę zainstalować poprzednią wersję Pythona 3 w macOS przy użyciu brew?

Za pomocą polecenia brew install pythonotrzymałem najnowszą wersję Pythona 3 (obecnie v3.7.0), ale chcę mieć ostatnią wersję Pythona 3.6 (obecnie 3.6.5).

Czytałem o innym pakiecie, pyenvktóry może pomóc w obsłudze różnych instalacji Pythona, ale to rozwiązanie nie jest dla mnie odpowiednie.


5
Mimo wszystko, wsparcie Homebrew dla wielu wersji Pythona jest fatalne i stopniowo się pogarsza. Radziłbym w ogóle unikać używania Homebrew do instalowania Pythona. Python.org zapewnia pakiety instalacyjne macOS dla różnych wersji Pythona, które można zainstalować obok siebie (i obok instalacji Homebrew Python, jeśli chcesz). Korzystanie z tych pakietów lub użycie narzędzia takiego jak pyenv ostatecznie zaoszczędzi ci wiele żalu na dłuższą metę.
Daniel Pryden

Odpowiedzi:


260

Krótka odpowiedź

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

brew unlink python # ONLY if you have installed (with brew) another version of python 3
brew install --ignore-dependencies https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb

Jeśli wolisz odzyskać wcześniej zainstalowaną wersję, to:

brew info python           # To see what you have previously installed
brew switch python 3.x.x_x # Ex. 3.6.5_1

Długa odpowiedź

Istnieją dwie formuły instalacji Pythona za pomocą Homebrew: python@2i python.
Pierwsza jest przeznaczona dla Pythona 2, a druga dla Pythona 3.

Uwaga: nieaktualne odpowiedzi można znaleźć w sieci WWW, gdzie jest ona wymieniona python3jako nazwa formuły instalowania języka Python w wersji 3. Teraz jest po prostu python!

Domyślnie za pomocą tych formuł można zainstalować najnowszą wersję odpowiedniej głównej wersji języka Python. Nie możesz więc bezpośrednio zainstalować wersji pomocniczej, takiej jak 3.6.

Rozwiązanie

Dzięki brew, możesz zainstalować pakiet używając adresu formuły, na przykład w repozytorium git.

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

Lub specjalnie dla Pythona 3

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

Adres, który musisz podać, to adres do ostatniego zatwierdzenia formuły (python.rb) dla żądanej wersji. Możesz znaleźć identyfikator commint, 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 wzoru na wersję Pythona powyżej 3.6.5. Po tym, jak opiekunowie tego (oficjalnego) repozytorium wydali Python 3.7, przesyłają tylko aktualizacje receptury Pythona 3.7.

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

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


2
Jak to wpłynie lub będzie współdziałać z pakietami w Homebrew, które opierają się na domyślnym interpreterze python3?
Telemachus

1
W każdym razie aplikacje zależne od Pythona (instalowane z brew lub nie) będą szukać pliku wykonywalnego python3 w ścieżce aplikacji, a python3 będzie wskazywał na python3.6. Zatem domyślnym Pythonem 3 będzie 3.6 (jeśli użyjesz powyższego przykładu) i to powinno wystarczyć. Python 3.7 jest tak nowy; Wątpię, czy istnieje aplikacja, która wymaga wyraźnie Pythona 3.7, tak samo, nie znam żadnej aplikacji, która działa tylko z Pythonem 3.6. Innymi słowy. Nic ci nie będzie :)
ePi272314

2
Mam zainstalowany 3.7 i otrzymałem ten błąd: Error: python 3.7.0 is already installed To install 3.6.5_1, first run zaparz odpiąć pythona `` podczas używania 'krótkiej odpowiedzi'.
wuliwong

2
Dziękujemy za udostępnienie bezpośredniego linku do zatwierdzenia w wersji 3.6.5. Uratowałeś mnie przed beznadziejną sytuacją.
tsalaroth

4
Wiem, że to jest trochę starsze, ale nie potrafię się dowiedzieć, skąd masz link do wzoru. Obecna wersja 3.6 to 3.6.7, czy istnieje jakieś proste podejście do znalezienia tego wzoru?
diek

32

Jako aktualizacja, kiedy robisz

brew unlink python # If you have installed (with brew) another version of python
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb

Możesz napotkać

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

Aby go ominąć, dodaj --ignore-dependenciesargument do brew install.

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

1
a potem będziesz miał koszmar z piekłem zależności ... jak discourse.brew.sh/t/brew-install-python3-fails/1756/7
confiq

4
na początku to nie zadziałało; w zasadzie musiałem to zrobić: brew install --debug --ignore-dependencies raw.githubusercontent.com/Homebrew/homebrew-core/ ... a gdy zawiedzie make html, po prostu zignoruj ​​błąd, wybierając 2). błąd html / docs prawdopodobnie mnie ugryzie później, ale na razie działa dobrze: wzruszenie ramionami:
fasolka

24

Najpierw zainstalowałem Pythona 3.7

brew install python3
brew unlink python

następnie zainstalowałem Pythona 3.6.5 używając powyższego linku

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

Potem pobiegłem brew link --overwrite python. Teraz mam w systemie wszystkie pythony do tworzenia środowisk wirtualnych.

mian@tdowrick2~ $ python --version
Python 2.7.10
mian@tdowrick2~ $ python3.7 --version
Python 3.7.1
mian@tdowrick2~ $ python3.6 --version
Python 3.6.5

Tworzenie wirtualnego środowiska Python 3.7.

mian@tdowrick2~ $ virtualenv -p python3.7 env
Already using interpreter /Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7
Using base prefix '/Library/Frameworks/Python.framework/Versions/3.7'
New python executable in /Users/mian/env/bin/python3.7
Also creating executable in /Users/mian/env/bin/python
Installing setuptools, pip, wheel...
done.
mian@tdowrick2~ $ source env/bin/activate
(env) mian@tdowrick2~ $ python --version
Python 3.7.1
(env) mian@tdowrick2~ $ deactivate

Tworzenie wirtualnego środowiska Python 3.6

mian@tdowrick2~ $ virtualenv -p python3.6 env
Running virtualenv with interpreter /usr/local/bin/python3.6
Using base prefix '/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6'
New python executable in /Users/mian/env/bin/python3.6
Not overwriting existing python script /Users/mian/env/bin/python (you must use /Users/mian/env/bin/python3.6)
Installing setuptools, pip, wheel...
done.
mian@tdowrick2~ $ source env/bin/activate
(env) mian@tdowrick2~ $ python --version
Python 3.6.5
(env) mian@tdowrick2~ $ 

1
Chociaż wygląda na to, że byłoby świetnie, to już nie działa, a wynik jest taki:python -V && python3.7 -V && python3 -V && python3.6 -V Python 2.7.15 Python 3.7.3 Python 3.7.3 zsh: command not found: python3.6
Opłatek

1
Przyjrzyj się uważnie mojej odpowiedzi, dla 3.6 musisz napisać python3.6 -V. Zrobiłeś python3 -Vdwa razy, dlatego dostajesz się 3.7.3dwa razy i brakuje ci3.6
Mian Asbat Ahmad

1
Dla mnie to ukrywa python3.6pod /usr/local/Cellar/python/3.6.5_1/bin. Po utworzeniu linku działa tak, jak mówisz. Ten system zarządzania sobą w Pythonie wydaje się być prostym fraktalem Goldberga miliona programistów kodujących za pomocą ruchów Browna.
Eric Leschinski

12

Próbowałem wszystkiego, ale nie udało mi się. Wreszcie użyłem pyenvi zadziałało bezpośrednio jak urok.

Po homebrewzainstalowaniu po prostu wykonaj:

brew install pyenv
pyenv install 3.6.5

do zarządzania virtualenvami:

brew install pyenv-virtualenv
pyenv virtualenv 3.6.5 env_name

Aby uzyskać więcej informacji, zobacz pyenv i pyenv-virtualenv .

EDYCJA (2019/03/19)

Zauważyłem, że używanie pyenv-installer jest łatwiejsze niż homebrew, aby zainstalować pyenv i pyenv-virtualenv direclty:

curl https://pyenv.run | bash

Aby zarządzać wersją Pythona, globalnie:

pyenv global 3.6.5

lub lokalnie w podanym katalogu:

pyenv local 3.6.5

W rzeczywistości nie jest to bezpośrednia odpowiedź na pytanie, ale zamiast tego omijanie go przez virtualenvpodejście.
javadba

1
w rzeczywistości virtualenv nie jest konieczne. pyenvpozwala na zarządzanie wersjami Pythona bez konieczności używania venv
ClementWalter

11

Wypróbowałem wszystkie powyższe odpowiedzi, aby zainstalować Python 3.4.4. Instalacja Pythona działała, ale PIP nie został zainstalowany i nic nie mogłem zrobić, aby działał. Używałem Mac OSX Mojave, który powoduje pewne problemy z zlib, openssl.

Czego nie robić:

  • Staraj się unikać używania Homebrew dla poprzedniej wersji podanej przez formułę Python lub Python3 .
  • Nie próbuj kompilować Pythona

Rozwiązanie:

  1. Pobierz instalator 64-bitowego systemu macOS lub instalator 64-bitowego / 32-bitowego systemu macOS : https://www.python.org/downloads/release/python-365/
  2. W poprzednim kroku pobierze Python 3.6.5 , jeśli na przykład chcesz pobrać Python 3.4.4 , zamień w adresie URL powyżej python-365 na python-344
  3. Pobierz kliknij plik, który pobrałeś, otworzy się instalator GUI
  4. Jeśli pobrałeś python-365 , po instalacji, aby uruchomić tę wersję pythona, wpiszesz swój terminal python365 , to samo dla pip, będzie to pip365

ps: Nie musisz odinstalowywać swojej drugiej wersji Pythona w swoim systemie.


Edytować:


Znalazłem dużo dużo lepsze rozwiązanie, które działa na MacOSX, Windows, Linux itp.

  1. Nie ma znaczenia, czy masz już zainstalowany Python, czy nie.
  2. Pobierz Anaconda
  3. Po zainstalowaniu, w typie terminala: conda init
  4. W terminalu utwórz wirtualne środowisko z dowolnym plikiem wersją Pythona, na przykład wybrałem 3.4.4:conda create -n [NameOfYour VirtualEnvironment] python=3.4.4
  5. Następnie w terminalu możesz sprawdzić całe środowisko wirtualne, które utworzyłeś, poleceniem: conda info --envs
  6. Następnie w terminalu aktywuj wybrane środowisko wirtualne za pomocą: conda activate [The name of your virtual environment that was shown with the command at step 5]

7

Na wypadek, gdyby ktoś miał problem z pipem, jak poniżej

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

Główną przyczyną jest to, że openssl 1.1 nie obsługuje już Pythona 3.6. Musisz więc zainstalować starą wersję openssl 1.0

oto rozwiązanie:

brew uninstall --ignore-dependencies openssl
brew install https://github.com/tebelorg/Tump/releases/download/v1.0.0/openssl.rb

1

Aby rozwiązać ten problem homebrew, możesz tymczasowo cofnąć homebrew-coredatę i ustawić HOMEBREW_NO_AUTO_UPDATEzmienną tak, aby utrzymywała ją w miejscu:

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

Nie polecam trwałej aktualizacji homebrew-core, ponieważ przegapisz poprawki bezpieczeństwa, ale jest to przydatne do celów testowych.

Możesz także wyodrębnić stare wersje formuł homebrew do własnego kranu (tap_owner / tap_name) za pomocą brew extractpolecenia:

brew extract python tap_owner/tap_name --version=3.6.5

0

Najłatwiejszym sposobem dla mnie była instalacja Anacondy: https://docs.anaconda.com/anaconda/install/

Tam mogę stworzyć dowolną liczbę środowisk z różnymi wersjami Pythona i przełączać się między nimi jednym kliknięciem myszy. To nie może być prostsze.

Aby zainstalować różne wersje Pythona, postępuj zgodnie z tymi instrukcjami https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-python.html

Nowe środowisko programistyczne z inną wersją Pythona powstało w ciągu 2 minut. W przyszłości będę mógł z łatwością przełączać się tam i z powrotem.

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.