Comment puis-je installer une version précédente de Python 3 dans macOS en utilisant homebrew?

133

Comment puis-je installer une version précédente de Python 3 dans macOS à l'aide de brew?

Avec la commande, brew install pythonj'ai la dernière version de Python 3 (actuellement v3.7.0), mais je veux la dernière version de Python 3.6 (actuellement 3.6.5).

J'ai lu un autre package pyenvqui peut aider à gérer différentes installations de python, mais cette solution ne me convient pas.

ePi272314
la source
5
Pour ce que ça vaut, le support de Homebrew pour plusieurs versions de Python est épouvantable et s'aggrave progressivement. Je vous recommanderais d'éviter d'utiliser Homebrew pour installer Python. Python.org fournit des packages d'installation macOS pour différentes versions de Python qui peuvent être installés côte à côte (et côte à côte avec une installation Homebrew Python si vous le souhaitez). Soit en utilisant ces packages, soit en utilisant un outil comme pyenv vous évitera finalement beaucoup de peine à long terme.
Daniel Pryden

Réponses:

256

Réponse courte

Pour effectuer une installation propre de Python 3.6.5, utilisez:

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

Si vous préférez récupérer une version précédemment installée, alors:

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

Longue réponse

Il existe deux formules pour installer Python avec Homebrew: python@2et python.
Le premier est pour Python 2 et le second pour Python 3.

Remarque: vous pouvez trouver des réponses obsolètes sur le Web où il est mentionné python3comme nom de formule pour l'installation de Python version 3. Maintenant, c'est juste python!

Par défaut, avec ces formules, vous pouvez installer la dernière version de la version majeure correspondante de Python. Ainsi, vous ne pouvez pas installer directement une version mineure comme la 3.6.

Solution

Avec brew, vous pouvez installer un package en utilisant l'adresse de la formule, par exemple dans un référentiel git.

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

Ou spécifiquement pour Python 3

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

L'adresse que vous devez spécifier est l'adresse du dernier commit de la formule (python.rb) pour la version souhaitée. Vous pouvez trouver l'identifiant de commint en consultant l'historique de homebrew-core / Formula / python.rb

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

Python> 3.6.5

Dans le lien ci-dessus, vous ne trouverez pas de formule pour une version de Python supérieure à 3.6.5. Une fois que les responsables de ce référentiel (officiel) ont publié Python 3.7, ils ne soumettent que des mises à jour de la recette de Python 3.7.

Comme expliqué ci-dessus, avec homebrew, vous n'avez que Python 2 (python @ 2) et Python 3 (python), il n'y a pas de formule explicite pour Python 3.6 .

Bien que ces mises à jour mineures ne soient pour la plupart pas pertinentes dans la plupart des cas et pour la plupart des utilisateurs, je chercherai si quelqu'un a fait une formule explicite pour 3.6.

ePi272314
la source
2
Comment cela affectera-t-il ou interagira-t-il avec les packages dans Homebrew qui reposent sur l'interpréteur python3 par défaut?
Télémaque
1
Dans tous les cas, une application dépendant de Python (installée avec brew ou non) cherchera un exécutable python3 dans le chemin des applications, et vous aurez python3 pointant vers python3.6. Ainsi, votre Python 3 par défaut sera 3,6 (si vous utilisez l'exemple ci-dessus) et cela devrait suffire. Python 3.7 est si récent; Je doute qu'il existe une application qui nécessite explicitement Python 3.7, de la même manière, je ne connais aucune application qui ne fonctionne qu'avec Python 3.6. En d'autres termes.
Tout
2
J'ai installé la version 3.7 et j'ai reçu cette erreur: Error: python 3.7.0 is already installed To install 3.6.5_1, first run brew unlink python '' lors de l'utilisation de la `` réponse courte ''.
wuliwong
2
Merci d'avoir fourni le lien de validation direct pour la version 3.6.5. Vous m'avez sauvé d'une situation désespérée.
tsalaroth
4
Je sais que c'est un peu plus ancien, mais j'ai du mal à comprendre comment vous avez obtenu le lien vers la formule. La version actuelle de 3.6 est 3.6.7, existe-t-il une approche simple pour trouver cette formule?
diek
32

En guise de mise à jour, en faisant

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

Vous pouvez rencontrer

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

Pour le contourner, ajoutez l' --ignore-dependenciesargument à 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
amiabl
la source
1
et puis vous ferez un cauchemar avec l'enfer des dépendances ... comme discourse.brew.sh/t/brew-install-python3-fails/1756/7
confiq
4
cela n'a pas fonctionné pour moi au début; essentiellement dû faire ceci: brew install --debug --ignore-dependencies raw.githubusercontent.com/Homebrew/homebrew-core / ... et une fois qu'il échoue dans make html, ignorez simplement l'erreur en sélectionnant 2). l'échec html / docs me mordra probablement plus tard, mais pour l'instant cela fonctionne bien: haussement d'épaules:
beans
20

Ce que j'ai fait, c'est d'abord installer python 3.7

brew install python3
brew unlink python

puis j'ai installé python 3.6.5 en utilisant le lien ci-dessus

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

Après cela, j'ai couru brew link --overwrite python. Maintenant, j'ai tous les pythons dans le système pour créer les environnements virtuels.

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

Pour créer un environnement virtuel 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

Pour créer un environnement virtuel 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~ $ 
Mian Asbat Ahmad
la source
1
Bien que cela semble être génial, cela ne fonctionne plus, le résultat est: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
Regardez attentivement ma réponse, pour 3.6 vous devez écrire python3.6 -V. Vous avez fait python3 -Vdeux fois c'est pourquoi vous obtenez 3.7.3deux fois et 3.6
manquez
1
Pour moi, cela se cache python3.6sous /usr/local/Cellar/python/3.6.5_1/bin. Une fois que j'ai fait un lien, cela fonctionne comme vous le dites. Ce système d'autogestion python semble être une fractale rube goldberg d'un million de programmeurs codant par mouvement brownien.
Eric Leschinski
11

J'ai essayé toutes les réponses ci-dessus pour installer Python 3.4.4. L'installation de python a fonctionné, mais PIP ne serait pas installé et je ne pourrais rien faire pour le faire fonctionner. J'utilisais Mac OSX Mojave, ce qui posait des problèmes avec zlib, openssl.

Ce qu'il ne faut pas faire:

  • Essayez d'éviter d'utiliser Homebrew pour la version précédente donnée par la formule Python ou Python3 .
  • N'essayez pas de compiler Python

Solution:

  1. Téléchargez le programme d' installation de macOS 64 bits ou de macOS 64 bits / 32 bits : https://www.python.org/downloads/release/python-365/
  2. À l'étape précédente, il téléchargera Python 3.6.5 , si par exemple, vous souhaitez télécharger Python 3.4.4 , remplacez dans l'url ci - dessus python-365 par python-344
  3. Télécharger cliquez sur le fichier que vous avez téléchargé un programme d'installation GUI s'ouvrira
  4. Si vous avez téléchargé python-365 , après l'installation, pour lancer cette version de python, vous allez taper dans votre terminal python365 , même chose pour pip, ce sera pip365

ps: Vous n'avez pas à désinstaller votre autre version de Python sur votre système.


Éditer:


J'ai trouvé une bien meilleure solution qui fonctionne sur MacOSX, Windows, Linux, etc.

  1. Peu importe que vous ayez déjà installé python ou non.
  2. Télécharger Anaconda
  3. Une fois installé, en type de terminal: conda init
  4. Dans le terminal, créez un environnement virtuel avec n'importe quelle version de python, par exemple, j'ai choisi 3.4.4:conda create -n [NameOfYour VirtualEnvironment] python=3.4.4
  5. Ensuite, dans le terminal, vous pouvez vérifier tout l'environnement virtuel que vous avez créé avec la commande: conda info --envs
  6. Puis, dans le terminal, activez l'environnement virtuel de votre choix avec: conda activate [The name of your virtual environment that was shown with the command at step 5]
Vincedjango
la source
10

J'ai tout essayé mais je n'ai pas pu le faire fonctionner. Enfin je l'ai utilisé pyenvet cela a fonctionné directement comme un charme.

Alors après avoir homebrewinstallé, il suffit de faire:

brew install pyenv
pyenv install 3.6.5

pour gérer les virtualenvs:

brew install pyenv-virtualenv
pyenv virtualenv 3.6.5 env_name

Voir pyenv et pyenv-virtualenv pour plus d'informations.

MODIFIER (2019/03/19)

J'ai trouvé qu'il était plus facile d' utiliser pyenv-installer que homebrew pour installer les direclty pyenv et pyenv-virtualenv:

curl https://pyenv.run | bash

Pour gérer la version python, soit globalement:

pyenv global 3.6.5

ou localement dans un répertoire donné:

pyenv local 3.6.5
ClémentWalter
la source
Il ne s'agit en fait pas de répondre directement à la question, mais plutôt de la contourner par une virtualenvapproche.
javadba le
1
en fait, le virtualenv n'est pas nécessaire. pyenvvous permet de gérer les versions de python sans avoir besoin d'utiliser un venv
ClementWalter
6

Au cas où quelqu'un serait confronté à un problème de pip comme ci-dessous

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

La cause première est qu'openssl 1.1 ne prend plus en charge python 3.6. Vous devez donc installer l'ancienne version openssl 1.0

voici la solution:

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

Pour résoudre ce problème avec homebrew, vous pouvez temporairement antidater homebrew-coreet définir la HOMEBREW_NO_AUTO_UPDATEvariable pour la maintenir en place:

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

Je ne recommande pas la rétro-datation permanente de homebrew-core, car vous manquerez de correctifs de sécurité, mais c'est utile à des fins de test.

Vous pouvez également extraire d'anciennes versions de formules homebrew dans votre propre tap (tap_owner / tap_name) en utilisant la brew extractcommande:

brew extract python tap_owner/tap_name --version=3.6.5
Steven Peters
la source
0

Le moyen le plus simple pour moi était d'installer Anaconda: https://docs.anaconda.com/anaconda/install/

Là, je peux créer autant d'environnements avec différentes versions de Python que je veux et basculer entre eux en un clic de souris. Il ne pouvait pas être plus facile.

Pour installer différentes versions de Python, suivez simplement ces instructions https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-python.html

Un nouvel environnement de développement avec une version différente de Python a été réalisé en 2 minutes. Et à l'avenir, je peux facilement basculer entre les deux.

klaaba
la source