Comment faire en sorte que la commande de programme 'python' exécute Python 3?
331
La pythoncommande de programme exécute Python 2. Python 3 peut être exécuté à l'aide de la python3commande. Comment exécuter Python 3 à l'aide de la pythoncommande?
Juste un avertissement: n'essayez pas de changer le lien symbolique / usr / bin / python pour qu'il pointe vers python3 au lieu de 2.7. De nombreux programmes disponibles dans le référentiel Ubuntu exigent que / usr / bin / python soit compatible avec Python 2.x.
Soulsource
1
Ah, maintenant je comprends ce que vous vouliez dire par mise à niveau ... En fait, les développeurs Ubuntu travaillent sur cela: wiki.ubuntu.com/Python/3 "C’est un objectif de publication pour Ubuntu 14.04 LTS de n’avoir que Python 3 sur le CD de bureau. images."
Soulsource
1
Sur une autre note, quiconque vient ici parce qu’il essaie d’apprendre comment utiliser Python 3 comme valeur par défaut peut trouver une utilisation dans la recherche d’environnements virtuels (par exemple, virtualenv) ou de conteneurs (par exemple, LXC ou Docker).
Kevin le
1
Pour en savoir plus sur l'avertissement de soulsource en haut, voir PEP 394, qui normalise les conventions de dénomination pour les exécutables Python coexistants et sur lequel s'appuient (et devrait) les programmeurs et les mainteneurs de paquets Python.
David Foerster
2
@wjandrea, oui, même dans un environnement virtuel, pythondoit rester essentiel python2. Je pensais que mon commentaire était un moyen d'avoir une version Python spécifique à l'application au lieu d'essayer de contourner le système Python.
Kevin
Réponses:
370
Un moyen simple et sûr serait d'utiliser un alias. Placez ce dans ~/.bashrcou ~/.bash_aliasesfichier:
alias python=python3
Après avoir ajouté ce qui précède dans le fichier, exécutez source ~/.bashrcou source ~/.bash_aliases.
en fait, je veux effacer 2.7 et le remplacer par 3.3. On dirait que c'est une mauvaise idée pour le moment.
Giri
35
+1 il n'y a aucune raison de purger la version 2.7 pour pouvoir utiliser la version 3.3. Comme beaucoup de logiciels dépendent encore de 2.7; continuez juste.
Pour Ubuntu et Debian, nous avons des objectifs de projet en cours pour faire de Python 3 la version par défaut préférée de Python dans les distributions.
Qu'est-ce que cela ne signifie pas :
/usr/bin/pythonpointera vers Python 3. Non, cela ne va pas arriver (à moins que PEP 394 ne préconise le contraire, ce qui est douteux pour l'avenir prévisible). /usr/bin/pythonet /usr/bin/python2pointera sur Python 2.7 et /usr/bin/python3sur la dernière version prise en charge de Python 3.
Python 2 sera supprimé de l'archive. Non, cela ne va pas arriver . Nous prévoyons que Python 2.7 restera pris en charge et disponible dans Ubuntu assez longtemps, étant donné que PEP 373 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 de Python dans les distributions".
Pour une utilisation CLI, comme @Radu Radeanu , je vous recommande de mettre un alias dans l'utilisateur ~/.bashrc, le .bash_aliasesfichier (les différents fichiers, y compris ~/.bash_profile,, sont chargés au moins une fois la plupart du temps à des fins d' organisation, mais peut varier selon la plate - forme). Les environnements virtuels Python 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 python3pour la compatibilité croisée.
L'utilisation envest agréable pour une utilisation mixte avec des environnements virtuels.
Note (merci à @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 utilisateurs program.pysans shebang peuvent être exécutés en appelant l’interpréteur 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.
Cela semble être obsolète maintenant: ils avaient prévu de supprimer python2 dans Xenial, mais ne l’avaient pas fait ensuite.
OrangeDog
1
@ OrangeDog, merci pour la mise à jour. Oui, la page wiki que j'ai citée est maintenant considérée comme obsolète, des progrès supplémentaires ayant été accomplis au cours des deux dernières années pour passer à uniquement Python 3. La nouvelle page qui suit cette progression est la page officielle Ubuntu Python .
Kevin
La "dernière" page est également obsolète en ce qui concerne les projets de Xenial.
OrangeDog
Je ne dirais pas qu'il est "obsolète", mais "il n'a pas été mis à jour récemment". Il semble toujours être le lieu actuel pour garder des messages à ce sujet. Cependant, dans les commentaires ici, je vous serais reconnaissant de toute autre source récente que quiconque pourrait trouver. Ajouter plus de sources à ma réponse, sur la raison pour laquelle il ne faut pas modifier simplement python, n’est pas vraiment pertinent tant que la conversion n’est pas terminée. Même dans ce cas, cela pourrait ne plus être un problème.
Kevin
2
Les alias sont internes à Bash et ne font pas partie de l'environnement. Vous aurez donc toujours besoin de l'utiliser python3dans un shebang python.
wjandrea
28
Mise à jour: J'ai appris que ce n'est pas la bonne façon, car Python2 et Python3 ne sont pas interchangeables.
python2 et python3 ne sont pas des alternatives. N'utilisez pas update-alternatives à cette fin.
jobin
Pourquoi ne sont-ils pas? L'un de vous peut-il expliquer pourquoi update-alternativesne convient pas au python? Est-ce à cause de legacy.python.org/dev/peps/pep-0394 ?
Dmitry Grigoryev
11
les alternatives sont des implémentations différentes pour les mêmes fonctionnalités. Python2 et Python3 ne fournissent pas les mêmes fonctionnalités.
Ely
Vous pouvez faire quelque chose comme ceci si vous avez installé manuellement (via ppa ou autre) d'autres versions de python3. sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 2
David Baucum
C’est ce que j’avais besoin de faire pour un vm 18.04.2 qui n’est pas livré avec python. Merci
Dark Star1
9
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 l'un ne fonctionnerait plus correctement à moins que vous n'ayez directement édité le fichier et modifié le shebang en faisant référence à "#! / Usr / bin / env python2.7". Sur les versions 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.
Vous pouvez créer un lien symbolique /usr/bin/pythonvers python3avec
sudo ln -s /usr/bin/python3 /usr/bin/python
et vous pouvez empêcher l’installation de Python 2 et pip2 en tant que dépendance avec
sudo apt-mark hold python python-pip
Voir les autres réponses pour savoir pourquoi vous ne voudriez peut-être pas faire cela. Ubuntu 18.04+ n’est plus livré avec Python 2, donc ça ne devrait pas être trop grave.
En ce qui concerne "Ubuntu 18.04 n’est plus livré avec Python 2, cela ne devrait donc pas être trop grave". Sur Ubuntu (même dans les versions sur lesquelles Python 2 n’est pas installé par défaut), un exécutable appelé pythonest supposé être Python 2, cela pourrait donc casser certaines choses.
Ne serait-il pas plus simple d'utiliser un lien symbolique? sudo ln -s /usr/bin/python3 /usr/local/bin/py
wjandrea
0
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 #!/usr/bin/pythondu travail, je préfère soumettre des correctifs à ces programmes que de continuer à faire des erreurs étranges et parfois difficiles à corriger.
Vous pouvez utiliser update-alternativespour fournir différentes versions de programmes pouvant être nécessaires à différents moments en raison de problèmes de compatibilité.
Cette réponse est un bon exemple de la façon de configurer pour gérer simultanément différentes versions de gcc / g ++, par exemple.
faites juste la même chose avec python2.7 et python 3.3
Les utilisateurs débutants peuvent ne pas être en mesure d'adapter facilement la réponse liée à une situation différente. En plus de créditer la réponse précédente, il serait bon de définir les étapes nécessaires pour Python.
Chaskes
Voici la solution que j'ai trouvée étape par étape linuxconfig.org/…
woto
Python 2 et 3 ne sont pas des alternatives - même différentes versions mineures ne le sont pas ( par exemple ). Cette méthode peut facilement casser des choses.
python
doit rester essentielpython2
. Je pensais que mon commentaire était un moyen d'avoir une version Python spécifique à l'application au lieu d'essayer de contourner le système Python.Réponses:
Un moyen simple et sûr serait d'utiliser un alias. Placez ce dans
~/.bashrc
ou~/.bash_aliases
fichier:Après avoir ajouté ce qui précède dans le fichier, exécutez
source ~/.bashrc
ousource ~/.bash_aliases
.Par exemple:
Pour contourner l'alias, utilisez la
command
commande intégrée:Une autre façon de contourner l'alias consiste à utiliser
\
avant la commande.Pour désactiver l'alias dans le shell courant utilisez la
unalias
commande intégrée:la source
[Juin 2016] L'endroit recommandé pour obtenir des informations sur la transition est la page officielle Ubuntu Python .
À partir du wiki Ubuntu :
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 de Python dans les distributions".
Pour une utilisation CLI, comme @Radu Radeanu , je vous recommande de mettre un alias dans l'utilisateur
~/.bashrc
, le.bash_aliases
fichier (les différents fichiers, y compris~/.bash_profile
,, sont chargés au moins une fois la plupart du temps à des fins d' organisation, mais peut varier selon la plate - forme). Les environnements virtuels Python fonctionnent également bien.Exemples d'alias:
ou
Les scripts doivent toujours utiliser quelque chose comme
#!/usr/bin/env python3
pour la compatibilité croisée.L'utilisation
env
est agréable pour une utilisation mixte avec des environnements virtuels.Note (merci à @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 utilisateursprogram.py
sans shebang peuvent être exécutés en appelant l’interpréteur aliasé comme cecipython 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.la source
python
, n’est pas vraiment pertinent tant que la conversion n’est pas terminée. Même dans ce cas, cela pourrait ne plus être un problème.python3
dans un shebangpython
.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 de ligne de commande
update-alternatives
.Si vous obtenez l'erreur "pas d'alternative pour python", configurez vous-même une alternative avec la commande suivante:
Modifiez le chemin
/usr/bin/python3
d' accès à votre version de python souhaitée en conséquence.la source
update-alternatives
ne convient pas au python? Est-ce à cause de legacy.python.org/dev/peps/pep-0394 ?sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 2
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 l'un ne fonctionnerait plus correctement à moins que vous n'ayez directement édité le fichier et modifié le shebang en faisant référence à "#! / Usr / bin / env python2.7". Sur les versions 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.
la source
Faire
alors écris soit
ou
Enregistrez le fichier, fermez le terminal et ouvrez-le à nouveau.
Lien
la source
Vous pouvez créer un lien symbolique
/usr/bin/python
verspython3
avecet vous pouvez empêcher l’installation de Python 2 et pip2 en tant que dépendance avec
Voir les autres réponses pour savoir pourquoi vous ne voudriez peut-être pas faire cela. Ubuntu 18.04+ n’est plus livré avec Python 2, donc ça ne devrait pas être trop grave.
la source
python
est supposé être Python 2, cela pourrait donc casser certaines choses.python
->/usr/bin/python
(à condition que vous ayez la permission d'écrire sur / usr / local / bin)
alors vous ne tapez que py (et utilisez py dans #! lignes) pour votre python choisi.
la source
sudo ln -s /usr/bin/python3 /usr/local/bin/py
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
#!/usr/bin/python
du travail, je préfère soumettre des correctifs à ces programmes que de continuer à faire des erreurs étranges et parfois difficiles à corriger.la source
Vous pouvez utiliser
update-alternatives
pour fournir différentes versions de programmes pouvant être nécessaires à différents moments en raison de problèmes de compatibilité.Cette réponse est un bon exemple de la façon de configurer pour gérer simultanément différentes versions de gcc / g ++, par exemple.
faites juste la même chose avec python2.7 et python 3.3
la source