Comment définir la version par défaut de Python sur 3.x sur OS X?

329

J'utilise Mountain Lion et la version de base de Python par défaut est 2.7. J'ai téléchargé Python 3.3 et je veux le définir par défaut.

Actuellement:

$ python
    version 2.7.5
$ python3.3
    version 3.3

Comment le configurer pour que chaque fois que je l'exécute, $ pythonil s'ouvre en 3.3?

Marcus
la source
Duplication possible de la façon de changer la version par défaut de python?
Dheeraj Vepakomma
Vous pouvez gérer la version de python avec pyenv.
Shin Kim

Réponses:

580

La modification de la version de l'exécutable python par défaut à l'échelle du système pourrait interrompre certaines applications qui dépendent de python2.

Cependant, vous pouvez alias les commandes dans la plupart des shells, puisque les shells par défaut dans macOS (bash dans 10.14 et ci-dessous; zsh dans 10.15) partagent une syntaxe similaire. Vous pouvez mettre l'alias python = 'python3' dans votre ~/.profile, puis le source ~/.profiledans votre ~/.bash_profileet / ou votre ~/.zsh_profileavec une ligne comme:

[ -e ~/.profile ] && . ~/.profile

De cette façon, votre alias fonctionnera sur tous les shells.

Avec cela, la pythoncommande appelle maintenant python3. Si vous souhaitez invoquer le python "original" (qui fait référence à python2 ) à l'occasion, vous pouvez utiliser command pythonce qui ne modifiera pas l'alias et fonctionnera dans tous les shells.

Si vous lancez des interprètes plus souvent (je le fais) , vous pouvez toujours créer plus d'alias à ajouter également, c'est-à-dire:

alias 2='python2'
alias 3='python3'

Astuce: pour les scripts, au lieu d'utiliser un shebang comme:

#!/usr/bin/env python

utilisation:

#!/usr/bin/env python3

De cette façon, le système utilisera python3 pour exécuter les exécutables python .

Santosh Kumar
la source
2
Ne doit-il pas être placé dans ~ / .bash_profile au lieu de ~ / .bash_aliases?
UnsettlingTrend du
4
Mettre alias python=python3puis exécuter pythondans mon terminal sur osx el capitan n'a pas fonctionné pour moi. J'ai essayé de l'enregistrer à la fois ~ / .bash_aliases et ~ / .bash_profile.
Haymaker87
43
@ Haymaker87 exécuté source ~/.bash_profileaprès modification du ~/.bash_profilefichier.
Wei Lu
15
Vous pouvez faire de même pour pip:alias pip='pip3.6'
stephen
@ surfer190 qui causera un problème lors de l'exécution avec sudo, n'est-ce pas?
Santosh Kumar
142

Vous pouvez le résoudre par un lien symbolique.

unlink /usr/local/bin/python
ln -s /usr/local/bin/python3.3 /usr/local/bin/python
Shin Kim
la source
25
C'est la bonne réponse (les alias sont agréables mais uniquement accessibles par bash, ce qui limite d'où vous pouvez appeler). Cependant, j'utiliserais unlinkau lieu de rmpour supprimer les liens symboliques (si vous ajoutez accidentellement une barre oblique de fin sur rmvous pourriez avoir de mauvais résultats). Alternativement, vous pouvez faire ln -s -f ...ce qui devrait remplacer le lien symbolique actuel.
Chad Befus
2
@ChadBefus Merci pour votre réponse. Je suis d'accord avec votre opinion. unlink est plus sûr que rm.
Shin Kim
3
Cela a-t-il des conséquences pour les scripts qui pythondevraient l'être python2.7?
Anton Tarasenko,
19
macOS:unlink: /usr/bin/python: Operation not permitted
MarksCode
4
@MarksCode essaie juste d'exécuter la deuxième ligne d'origine (c'est- ln -s... à- dire avec/local/ ).
EliadL
42

Ouvrez le fichier ~ / .bash_profile .

vi ~/.bash_profile

Mettez ensuite l'alias comme suit:

alias python='python3'

Maintenant, enregistrez le fichier, puis exécutez le fichier ~ / .bash_profile .

source ~/.bash_profile

Félicitations !!! Maintenant, vous pouvez utiliser python3 en tapant python .

python --version

Python 3.7.3

Ananta Chandra Das
la source
Si vous avez trouvé comme je l'ai fait que le même problème s'applique à pip (c'est-à-dire que la version pip --version est toujours 2.7.x), alors vous devrez faire les mêmes étapes pour pip3. vi ~ / .bash_profile, alias pip = 'pip3', source ~ / .bash_profile, pip --version
SnellyBigoda
Dois-je vraiment le faire à source ~/.bash_profilechaque fois que je rouvre mon terminal? Il revient à python2 une fois que je ferme et rouvre le terminal.
Ricky Aguilar
21

Accédez au type de terminal:

alias python=python3.x

Cela configurera le python par défaut en tant que python3.x

Aditya
la source
1
Cela a fonctionné pour moi mais en utilisant "alias python = python3"
Discant
Cela définira temporairement la version python pour cette instance de terminal.
Ashwin R
12

Ce qui suit a fonctionné pour moi

cd /usr/local/bin
mv python python.old
ln -s python3 python
Mayank Jain
la source
10

Je suis un peu en retard sur le jeu sur celui-ci, mais j'ai pensé que je devrais poster une réponse mise à jour car je viens de rencontrer ce problème par moi-même. Veuillez noter que cela ne s'appliquera qu'à une configuration basée sur Mac (je ne l'ai pas essayé avec Windows ou n'importe quelle version de Linux).

Le moyen le plus simple de faire fonctionner cela est d'installer Python via Brew . Si vous n'avez pas installé d'infusion, vous devrez d'abord le faire. Une fois installé, procédez comme suit dans le terminal:

brew install python

Cela installera Python 3. Une fois installé, exécutez ceci:

ls -l /usr/local/bin/python*

Vous verrez tous les liens créés par brew vers son installation Python. Cela ressemblera à ceci:

lrwxr-xr-x  1 username  admin  36 Oct  1 13:35 /usr/local/bin/python3@ -> ../Cellar/python/3.7.4_1/bin/python3
lrwxr-xr-x  1 username  admin  43 Oct  1 13:35 /usr/local/bin/python3-config@ -> ../Cellar/python/3.7.4_1/bin/python3-config
lrwxr-xr-x  1 username  admin  38 Oct  1 13:35 /usr/local/bin/python3.7@ -> ../Cellar/python/3.7.4_1/bin/python3.7
lrwxr-xr-x  1 username  admin  45 Oct  1 13:35 /usr/local/bin/python3.7-config@ -> ../Cellar/python/3.7.4_1/bin/python3.7-config
lrwxr-xr-x  1 username  admin  39 Oct  1 13:35 /usr/local/bin/python3.7m@ -> ../Cellar/python/3.7.4_1/bin/python3.7m
lrwxr-xr-x  1 username  admin  46 Oct  1 13:35 /usr/local/bin/python3.7m-config@ -> ../Cellar/python/3.7.4_1/bin/python3.7m-config

La première ligne de cet exemple montre le python3lien symbolique. Pour le définir comme pythonlien symbolique par défaut, exécutez ce qui suit:

ln -s -f /usr/local/bin/python3 /usr/local/bin/python

Une fois réglé, vous pouvez faire:

which python

et il doit montrer:

/usr/local/bin/python

Vous devrez recharger votre shell de terminal actuel pour qu'il utilise le nouveau lien symbolique dans ce shell, cependant, toutes les sessions shell récemment ouvertes l'utiliseront (devraient) automatiquement. Pour tester cela, ouvrez un nouveau shell de terminal et exécutez ce qui suit:

python --version
sknight
la source
Fonctionne très bien ( référence )
Nepo Znat
9

Allez dans 'Applications', entrez dans le dossier 'Python', il devrait y avoir un script bash appelé 'Update Shell Profile.command' ou similaire. Exécutez ce script et il devrait le faire.

Mise à jour: il semble que vous ne devriez pas la mettre à jour: comment changer la version par défaut de python?

CT Zhu
la source
8

Cela a fonctionné pour moi. J'ai ajouté un alias et redémarré mon terminal :

alias python=/usr/local/bin/python3
toadead
la source
6

Je crois que la plupart des gens qui ont atterri ici utilisent ZSH à travers iterm ou autre chose, et cela vous amène à cette réponse .

Vous devez ajouter / modifier vos commandes à la ~/.zshrcplace.

M. Crowley
la source
3

Je ne sais pas si cela est disponible sur OS X, mais sur Linux, je voudrais utiliser la modulecommande. Voyez ici .

Configurez correctement le modulefile, puis ajoutez quelque chose comme ça à votre fichier rc (par exemple ~ / .bashrc):

module load python3.3

Cela fera en sorte que vos chemins soient inversés comme requis lorsque vous vous connectez sans impact sur les valeurs par défaut du système.

Tourbillon
la source
3

Je pense que lorsque vous installez python, il met des instructions de chemin d'exportation dans votre fichier ~ / .bash_profile. Donc, si vous n'avez plus l'intention d'utiliser Python 2, vous pouvez simplement supprimer cette déclaration à partir de là. L'alias comme indiqué ci-dessus est également un excellent moyen de le faire.

Voici comment supprimer la référence de ~ / .bash_profile - vim ./.bash_profile - supprimer la référence (AKA quelque chose comme: export PATH = "/ Users / bla / anaconda: $ PATH") - enregistrer et quitter - source ./ .bash_profile pour enregistrer les modifications

doubleOK
la source
Cela n'arrive pas
co2f2e
3
$ sudo ln -s -f $(which python3) $(which python)

terminé.

oori
la source
1

Si vous utilisez un virtualenvwrapper, vous pouvez simplement le localiser à l'aide which virtualenvwrapper.sh, puis l'ouvrir à l'aide de vimou tout autre éditeur, puis modifier ce qui suit

# Locate the global Python where virtualenvwrapper is installed.
if [ "${VIRTUALENVWRAPPER_PYTHON:-}" = "" ]
then
    VIRTUALENVWRAPPER_PYTHON="$(command \which python)"
fi

Changez la ligne VIRTUALENVWRAPPER_PYTHON="$(command \which python)"en VIRTUALENVWRAPPER_PYTHON="$(command \which python3)".

Esir Kings
la source
1

Pour moi, la solution consistait à utiliser PyCharm et à définir la version par défaut de python sur celle avec laquelle je dois travailler.

installez PyCharm et allez dans le fichier ==> préférences pour le nouveau projet, puis choisissez l'interpréteur que vous voulez pour vos projets, dans ce cas python 3.3

Chama
la source
1

Si vous utilisez macports, vous n'avez pas besoin de jouer avec des alias ou des variables d'environnement, utilisez simplement la méthode déjà proposée par macports, expliquée par cette Q&R:

Comment: Macports sélectionner python

TL; DR:

sudo port select --set python python27
alanwaring
la source
1

Si vous utilisez macports, cela a un moyen plus simple de le faire:

courir:

port install python37

après l'installation, définissez par défaut:

sudo port select --set python python37

sudo port select --set python3 python37

redémarrez votre fenêtre cmd, terminé.

Clark So
la source
1

Eh bien ... c'est un peu vieux. Mais mérite toujours une bonne réponse.

Et le bon est que vous ne voulez pas toucher le Python par défaut sur Mac.

Installez n'importe quelle version de Python dont vous avez besoin via Homebrew ou autre et utilisez-la dans virtualenv. Virtualenv est souvent considéré comme quelque chose comme de la merde, mais c'est toujours bien mieux que de changer la version de python à l'échelle du système (macOS est susceptible de se protéger contre de telles actions) ou à l'échelle de l'utilisateur, à l'échelle de bash ... peu importe. Oubliez juste le Python par défaut. Utiliser des terrains de jeux comme venv est ce dont votre système d'exploitation sera le plus, le plus reconnaissant.

Le cas est, par exemple, que de nombreuses distributions Linux modernes se débarrassent de Python2 installé prêt à l'emploi, ne laissant que Python3 dans le système. Mais chaque fois que vous essayez d'installer quelque chose d'ancien avec python2 comme dépendance ... j'espère que vous comprenez ce que je veux dire. Un bon développeur s'en fiche. Les bons développeurs créent des aires de jeux propres avec la version python qu'ils souhaitent.

Tor_Gash
la source
0

Les utilisateurs de Mac doivent simplement exécuter le code suivant sur le terminal

brew switch python 3.x.x

3.xx devrait être la nouvelle version de python.

Cela mettra à jour tous les liens du système.

Dilshan
la source
0

Les suggestions d'alias python en python3 entraîneront des problèmes avec les environnements virtuels qui définissent la version de python (par exemple: pyenv). Avec pyenv, vous pouvez définir la version globalement comme ceci:

pyenv global 3.8.2

puis dans tout projet spécifique, vous pouvez créer un fichier de version .python qui contient la version python:

pyenv local 2.7.1

C'est la meilleure façon de gérer plusieurs versions de python sur un système à mon avis.

Jacob
la source