web-dev-qa-db-fra.com

Comment faire en sorte que la commande de programme 'python' exécute Python 3?

La commande de programme python exécute Python 2. Python 3 peut être exécutée à l'aide de la commande python3. Comment exécuter Python 3 à l'aide de la commande python?

307
Giri

Un moyen simple et sûr serait d'utiliser un alias. Placez ceci dans le fichier ~/.bashrc ou ~/.bash_aliases:

alias python=python3

Après avoir ajouté ce qui précède dans le fichier, exécutez source ~/.bashrc ou source ~/.bash_aliases.

Par exemple:

$ python --version
Python 2.7.6
$ python3 --version
Python 3.4.3
$ alias python=python3
$ python --version
Python 3.4.3

Pour contourner l'alias, utilisez la commande intégrée command:

$ command python --version
Python 2.7.6

Une autre façon de contourner l'alias consiste à utiliser \ avant la commande.

$ \python --version 
Python 2.7.6

Pour désactiver l'alias dans le shell actuel, utilisez la commande intégrée unalias:

$ unalias python
$ python --version
Python 2.7.6
347
Radu Rădeanu

[juin 2016] L'endroit recommandé pour obtenir des informations sur la transition est officiel buntu Python page.


De la wiki Ubunt :

Pour Ubuntu et Debian, nous avons en cours projet objectifs de rendre Python 3 par défaut, la version préférée Python dans les distributions. .

Ce que cela ne signifie pas :

  • /usr/bin/python pointera vers Python 3. Non, cela ne se produira pas (sauf si PEP 394 plaide autrement, ce qui est douteux dans un avenir prévisible). /usr/bin/python et /usr/bin/python2 pointeront vers Python 2.7 et /usr/bin/python3 pointeront vers la dernière version prise en charge Python 3.

  • Python 2 sera supprimé de l'archive. Non, cela ne va pas arriver . Nous prévoyons que Python2.7 restera pris en charge et disponible dans Ubuntu assez longtemps, étant donné que PEP 37 promet une prise en charge de la maintenance des correctifs de bogues en amont jusqu’en 2020.

Il n'est pas recommandé de modifier le lien symbolique en raison d'autres dépendances de packages, mais ils "ont des objectifs de projet en cours pour faire de Python 3 la version par défaut préférée Python dans les distributions".


Pour l’utilisation de la CLI, comme @ Radu Rădean , je vous conseillerais de mettre un alias dans le fichier ~/.bashrc, .bash_aliases de l’utilisateur (les différents fichiers, y compris ~/.bash_profile, sont chargés au moins une fois et servent principalement à des fins organisationnelles, mais peut varier selon la plate-forme). Python environnements virtuels fonctionnent également bien.

Exemples d'alias:

alias python=python3

ou

alias python='/usr/bin/python3'

Les scripts doivent toujours utiliser quelque chose comme #!/usr/bin/env python3 pour assurer la compatibilité croisée.

Utiliser env est idéal pour une utilisation mixte avec des environnements virtuels.

Note (grâce à @wjandrea): les alias font partie du runtime bash, pas de l'environnement utilisateur. Par conséquent, ils ne sont pas disponibles pour le Shebang (#!). Si vous préférez l’alias python = python3, certains program.py sans Shebang peuvent être exécutés en appelant l’interprète avec alias, comme ceci python program.py. L'aliasing peut également être utile pour les systèmes dotés de plusieurs versions de python3 telles que 3.4 et 3.6.

80
Kevin

Mise à jour: J'ai appris que ce n'est pas la bonne façon, car Python2 et Python3 ne sont pas interchangeables.

Vous pouvez essayer l'outil en ligne de commande update-alternatives .

$ Sudo update-alternatives --config python

Si vous obtenez l'erreur "pas d'alternative pour python", configurez vous-même une alternative avec la commande suivante:

$ Sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10

Modifiez le chemin /usr/bin/python3 en fonction de votre version python souhaitée.

19
webwurst

Ubuntu, et le reste des distributions Linux d'ailleurs, dépendent encore largement de Python 2.7 pour un certain nombre d'applications et de commandes. Si vous modifiez la référence par défaut de "python" en Python 3.x, un certain nombre de fonctions Python commenceront à générer des erreurs d'assertion.

Par exemple, sous Ubuntu, "pip" pour un ne fonctionnerait plus correctement à moins que vous n'ayez directement édité le fichier et changé le Shebang en faisant référence à "#!/Usr/bin/env python2.7". Sur les variantes RHEL (Red Hat Enterprise Linux) telles que Red Hat, Fedora et CentOS, la commande 'Yum' dépend également de Python 2.7.

Ce que je veux dire par là, c'est que vous feriez en sorte qu'une grande quantité de code commence à générer des erreurs d'assertion afin de pouvoir taper 'python' dans le terminal pour faire référence à Python 3.x.

Vous ferez bien mieux d'utiliser la commande 'python3' dans le terminal et le Shebang '#!/Usr/bin/env python3' dans vos fichiers Python 3.x.

7
Moony

Faire

cd ~
gedit .bash_aliases

alors écris soit

alias python=python3

ou

alias python='/usr/bin/python3'

Enregistrez le fichier, fermez le terminal et ouvrez-le à nouveau.
Lien

2
Breeze

Vous pouvez créer un lien symbolique /usr/bin/python vers python3 avec

Sudo ln -s /usr/bin/python3 /usr/bin/python

et vous pouvez empêcher que Python 2 et pip2 ne soient installés en tant que dépendance avec

Sudo apt-mark hold python python-pip

Voir les autres réponses pour savoir pourquoi vous ne voulez peut-être pas faire cela. Ubuntu 18.04+ n’est plus livré avec Python 2, donc cela ne devrait pas être trop grave.

1
Boris
cat > /usr/local/bin/py
#!/bin/dash
python3 "$@"
<CTRL-D>

(à condition que vous ayez la permission d'écrire sur/usr/local/bin)

cat > /usr/local/bin/pyi
#!/bin/dash
python3 -i "$@"
<CTRL-D>

alors vous ne tapez que py (et utilisez py dans #! lignes) pour votre python choisi.

0
John Allsup

Je trouve très utile de supprimer simplement/usr/bin/python et/usr/bin/pip. Cela oblige tous les programmes à utiliser les commandes "python2" et "python3".

Bien que certains paquets optionnels et obsolètes dépendent de #!/usr/bin/python pour fonctionner, je préfère soumettre des correctifs à ces programmes que de continuer à faire des erreurs étranges et parfois difficiles à déboguer.

0
Erik Aronesty