MacOS'ta homebrew kullanarak Python 3'ün önceki bir sürümünü nasıl kurabilirim?


133

Brew kullanarak macOS'ta Python 3'ün önceki bir sürümünü nasıl kurabilirim?

Komutla brew install pythonPython 3 (şu anda v3.7.0) en son sürümünü var ama ben Python 3.6 (şu anda 3.6.5) son versiyonunu istiyorum.

pyenvFarklı python kurulumunu gerçekleştirmeye yardımcı olabilecek başka bir paket hakkında okudum , ancak bu çözüm benim için uygun değil.


5
Ne olursa olsun, Homebrew'in birden fazla Python sürümü için desteği berbat ve giderek kötüleşiyor. Python'u kurmak için Homebrew kullanmaktan kaçınmanızı tavsiye ederim. Python.org, yan yana (ve isterseniz bir Homebrew Python kurulumuyla yan yana) kurulabilen çeşitli Python sürümleri için macOS yükleme paketleri sağlar . Ya bu paketleri kullanmak ya da pyenv gibi bir araç kullanmak nihayetinde uzun vadede sizi çok fazla kederden kurtaracaktır.
Daniel Pryden

Yanıtlar:


256

Kısa cevap

Temiz bir Python 3.6.5 yüklemesi yapmak için şunu kullanın:

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

Önceden yüklenmiş bir sürümü kurtarmayı tercih ederseniz, o zaman:

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

Uzun cevap

Python'u Homebrew ile kurmak için iki formül vardır: python@2ve python.
Birincisi Python 2 ve ikincisi Python 3 içindir.

Not:python3 Python sürüm 3'ü yüklemek için formül adı olarak bahsedildiği web'de güncel olmayan cevapları bulabilirsiniz . Şimdi sadece python!

Varsayılan olarak, bu formüllerle Python'un ilgili ana sürümünün en son sürümünü yükleyebilirsiniz. Yani 3.6 gibi küçük bir sürümü doğrudan kuramazsınız.

Çözüm

İle brew, formülün adresini kullanarak, örneğin bir git deposuna bir paket kurabilirsiniz.

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

Veya özellikle Python 3 için

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

Belirlemeniz gereken adres, istenen sürüm için formülün (python.rb) son kaydının adresidir. Commint tanımlayıcısını homebrew-core / Formula / python.rb geçmişine bakarak bulabilirsiniz.

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

Python> 3.6.5

Yukarıdaki bağlantıda, 3.6.5'in üzerindeki bir Python sürümü için bir formül bulamayacaksınız. Bu (resmi) deponun sahipleri Python 3.7'yi yayınladıktan sonra, yalnızca Python 3.7 tarifine güncellemeler gönderirler.

Yukarıda açıklandığı gibi, homebrew ile yalnızca Python 2 (python @ 2) ve Python 3 (python) vardır, Python 3.6 için açık bir formül yoktur .

Bu küçük güncellemeler çoğu durumda ve çoğu kullanıcı için çoğunlukla alakasız olsa da, birisi 3.6 için açık bir formül yapıp yapmadığını araştıracağım.


2
Bu, Homebrew'da varsayılan python3 yorumlayıcısına dayanan paketleri nasıl etkileyecek veya onlarla etkileşime girecek?
Telemachus

1
Her durumda, Python'a bağlı uygulamalar (brew ile yüklenir veya kurulmaz) uygulama yolunda bir python3 çalıştırılabilir arar ve python3.6'ya işaret eden python3'e sahip olursunuz. Bu nedenle, varsayılan Python 3'ünüz 3.6 olacaktır (yukarıdaki örneği kullanırsanız) ve bu yeterli olacaktır. Python 3.7 çok yeni; Açıkça Python 3.7 gerektiren bir uygulama olduğundan şüpheliyim, aynı şekilde sadece Python 3.6 ile çalışan herhangi bir uygulama bilmiyorum. Diğer bir deyişle. İyi olacaksın :)
ePi272314

2
3.7 yükledim ve bu hatayı Error: python 3.7.0 is already installed To install 3.6.5_1, first run aldım : 'kısa cevap' kullanırken brew unlink python ''.
wuliwong

2
3.6.5 için doğrudan taahhüt bağlantısını sağladığınız için teşekkür ederiz. Beni umutsuz bir durumdan kurtardın.
tsalaroth

4
Bunun biraz daha eski olduğunu biliyorum, ama formülle olan bağlantıyı nasıl elde ettiğinizi anlamaya çalışıyorum. 3.6'nın mevcut sürümü 3.6.7'dir, bu formülü bulmak için basit bir yaklaşım var mı?
diek

32

Güncelleme olarak, yaparken

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

Karşılaşabilirsin

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

Bunu atlamak için, --ignore-dependenciesbrew install argümanını ekleyin .

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
ve sonra bağımlılık cehennemi ile bir kabus
yaşayacaksınız

4
bu ilk başta benim için işe yaramadı; esasen bunu yapmak zorundaydı: brew install --debug --ignore-dependencies raw.githubusercontent.com/Homebrew/homebrew-core/… ve make html'de başarısız olduğunda, 2) 'yi seçerek hatayı yok sayın. html / docs hatası muhtemelen beni daha sonra ısırır, ancak şimdilik iyi çalışıyor: omuz silkme:
fasulye

21

Yaptığım şey ilk olarak python 3.7'yi kurmaktı

brew install python3
brew unlink python

sonra yukarıdaki bağlantıyı kullanarak python 3.6.5 kurdum

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

Ondan sonra koştum brew link --overwrite python. Artık sanal ortamları oluşturmak için sistemdeki tüm pitonlara sahibim.

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

Python 3.7 sanal ortamı oluşturmak için.

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

Python 3.6 sanal ortamı oluşturmak için

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
Bu harika gibi görünse de, artık işe 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
Wafer

1
Cevabıma yakından bakın, 3.6 için python3.6 -V yazmalısınız. python3 -Vİki kez yaptın, bu yüzden 3.7.3iki kez alıyorsun ve 3.6
özlüyorsun

1
Benim için bu gizler python3.6altında /usr/local/Cellar/python/3.6.5_1/bin. Bir bağlantı oluşturduğumda, söylediğin gibi çalışıyor. Bu python özyönetim sistemi, brownian hareketi ile kodlayan bir milyon programcının rube goldberg fraktalına benziyor.
Eric Leschinski

11

Python 3.4.4'ü yüklemek için yukarıdaki tüm cevapları denedim. Python kurulumu işe yaradı, ancak PIP kurulmayacaktı ve çalışmasını sağlamak için yapabileceğim hiçbir şey yoktu. Zlib ile bazı sorunlara neden olan Mac OSX Mojave kullanıyordum, openssl.

Ne yapmamalı:

  • Python veya Python3 formülüyle verilen önceki sürüm için Homebrew kullanmaktan kaçının .
  • Python'u derlemeye çalışmayın

Çözüm:

  1. İndir MacOS 64 bit yükleyici veya MacOS 64 bit / 32-bit yükleyici : https://www.python.org/downloads/release/python-365/
  2. Bir önceki adımda, o indirir Python 3.6.5 örneğin, indirmek istiyorsanız, Python 3.4.4 yukarıdaki url yerine, piton-365 tarafından piton-344
  3. İndirdiğiniz dosyaya tıklayın, bir GUI yükleyici açılacaktır
  4. Eğer indirdiyseniz python365 , kurulumdan sonra, piton bu sürümünü başlatmak için, kendi terminali yazacaktır python365 , pip için aynı şey, öyle olacak pip365

ps: Sisteminizden diğer Python sürümünüzü kaldırmanız gerekmez.


Düzenle:


MacOSX, Windows, Linux vb. Üzerinde çalışan çok daha iyi bir çözüm buldum.

  1. Halihazırda python kurulu olup olmadığı önemli değil.
  2. Anaconda'yı indirin
  3. Yüklendikten sonra terminal tipinde: conda init
  4. Terminalde, herhangi bir python sürümüyle sanal ortam oluşturun , örneğin, 3.4.4'ü seçtim:conda create -n [NameOfYour VirtualEnvironment] python=3.4.4
  5. Ardından, terminalde oluşturduğunuz tüm sanal ortamı şu komutla kontrol edebilirsiniz: conda info --envs
  6. Ardından, terminalde, seçtiğiniz sanal ortamı aşağıdakilerle etkinleştirin: conda activate [The name of your virtual environment that was shown with the command at step 5]

10

Her şeyi denedim ama çalışmasını sağlayamadım. Sonunda kullandım pyenvve doğrudan bir cazibe gibi çalıştı.

Öyleyse homebrewyükledikten sonra şunu yapın:

brew install pyenv
pyenv install 3.6.5

virtualenv'leri yönetmek için:

brew install pyenv-virtualenv
pyenv virtualenv 3.6.5 env_name

Daha fazla bilgi için pyenv ve pyenv-virtualenv'e bakın.

DÜZENLEME (2019/03/19)

Pyenv ve pyenv-virtualenv direclty'yi kurmak için pyenv-yükleyiciyi homebrew'den daha kolay buldum:

curl https://pyenv.run | bash

Python sürümünü global olarak yönetmek için:

pyenv global 3.6.5

veya belirli bir dizinde yerel olarak:

pyenv local 3.6.5

Bu aslında soruyu doğrudan yanıtlamak değil, bunun yerine bir virtualenvyaklaşımla soruyu atlatmaktır .
javadba

1
aslında virtualenv gerekli değildir. pyenvbir venv kullanmaya gerek kalmadan python sürümlerini yönetmenizi sağlar
ClementWalter

6

Birinin aşağıdaki gibi pip sorunuyla karşılaşması durumunda

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

Temel neden, openssl 1.1'in artık python 3.6'yı desteklememesidir. Yani openssl 1.0'ın eski sürümünü yüklemeniz gerekiyor

İşte çözüm:

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

1

Bunu çözmek için homebrew, geçici olarak geriye dönük tarih atabilir homebrew-coreve HOMEBREW_NO_AUTO_UPDATEdeğişkeni yerinde tutacak şekilde ayarlayabilirsiniz :

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

Güvenlik yamalarını kaçıracağınız için, homebrew-core'u kalıcı olarak geri yüklemenizi önermiyorum, ancak test amaçlı kullanışlıdır.

Ayrıca şu brew extractkomutu kullanarak homebrew formüllerinin eski sürümlerini kendi musluğunuza (tap_owner / tap_name) çıkartabilirsiniz :

brew extract python tap_owner/tap_name --version=3.6.5

0

Benim için en kolay yol Anaconda'yı kurmaktı: https://docs.anaconda.com/anaconda/install/

Orada farklı Python sürümleriyle istediğim kadar ortam oluşturabilir ve bir fare tıklamasıyla aralarında geçiş yapabilirim. Daha kolay olamazdı.

Farklı Python sürümlerini yüklemek için şu talimatları izleyin https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-python.html

Farklı bir Python sürümüne sahip yeni bir geliştirme ortamı 2 dakika içinde yapıldı. Ve gelecekte kolayca ileri geri geçiş yapabilirim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.