Le python
la commande de programme exécute Python 2. Python 3 peut être exécuté en utilisant le python3
commande. Comment Python 3 peut-il être exécuté en utilisant le python
commande?
Vous pouvez installer un package à l'échelle du système:
$ sudo apt install python-is-python3
Voir les mises en garde:python-est-le package python3 dans Ubuntu 20.04-qu'est-ce que c'est et que fait-il réellement?
Un moyen simple et sûr serait d'utiliser un alias. Placez ceci dans ~/.bashrc
ou ~/.bash_aliases
fichier:
alias python=python3
Après avoir ajouté ce qui précède dans le fichier, exécutez source ~/.bashrc
ou source ~/.bash_aliases
.
Exemple:
$ python --versionPython 2.7.6$ python3 --versionPython 3.4.3$ alias python=python3$ python --versionPython 3.4.3
Pour contourner l'alias, utilisez le command
commande intégrée:
$ command python --versionPython 2.7.6
Une autre façon de contourner l'alias est d'utiliser \
avant le commandement.
$ \python --version Python 2.7.6
Pour désactiver l'alias dans le shell actuel, utilisez le unalias
commande intégrée:
$ unalias python$ python --versionPython 2.7.6
Sur Ubuntu 20.04 et plus il suffit d'installer le python-is-python3
paquet:
sudo apt install python-is-python3
En plus de cela, vous pouvez empêcher Python 2 d'être installé en tant que dépendance de quelque chose à l'avenir avec apt-mark hold
:
sudo apt-mark hold python2 python2-minimal python2.7 python2.7-minimal libpython2-stdlib libpython2.7-minimal libpython2.7-stdlib
[Juin 2016] L'endroit recommandé pour les informations sur la transition est officiel Ubuntu Python page.
De la Wiki Ubuntu:
Pour Ubuntu et Debian, nous avons continu projet objectif pour faire de Python 3 la version Python par défaut préférée dans les distributions.
Qu'est-ce que c'est ne fait pas signifier:
/usr/bin/python
pointera vers Python 3. Non, cela n'arrivera pas (sauf PPE 394 autrement, ce qui est douteux dans un avenir prévisible)./usr/bin/python
et/usr/bin/python2
pointera vers Python 2.7 et/usr/bin/python3
pointera vers la dernière version de Python 3 prise en charge.Python 2 sera supprimé de l'archive. Non, cela n'arrivera pas. Nous nous attendons à ce que Python 2.7 reste supporté et disponible dans Ubuntu pendant assez longtemps, étant donné que PPE-TSE 373 promet une prise en charge de la maintenance des correctifs de bogues en amont jusqu'en 2020.
Il n'est pas recommandé de changer le lien symbolique à cause d'autres dépendances de paquets, mais ils "ont des objectifs de projet en cours pour faire de Python 3 la version Python préférée par défaut dans les distributions".
Pour une utilisation en CLI, comme @ Radu Radeanu, Je recommanderais de mettre un alias dans l'utilisateur ~/.bashrc
, .bash_aliases
fichier (les différents fichiers, y compris ~/.bash_profile
, sont chargés au moins une fois, sont principalement à des fins d'organisation, mais peuvent varier selon la plate-forme). Python environnements virtuels fonctionne aussi bien.
Exemples d'alias:
alias python=python3
ou
alias python='/usr/bin/python3'
Les scripts devraient toujours utiliser quelque chose comme #!/usr/bin/env python3
pour la compatibilité croisée.
Utiliser env
est agréable pour un usage mixte avec des environnements virtuels.
Remarque (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, alors certains program.py
sans un shebang pourrait être exécuté en invoquant l'interpréteur alias comme ceci python program.py
. L'aliasing peut également être utile pour les systèmes avec plusieurs versions de python3 comme 3.4 et 3.6 ensemble.
Mise à jour: C'est la mauvaise façon, j'ai appris, puisque Python2 et Python3 ne sont pas interchangeables.
Vous pouvez essayer l'outil de ligne de commande update-alternatives
.
$ sudo update-alternatives --config python
Si vous obtenez l'erreur "aucune 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
Changer le chemin /usr/bin/python3
à la version python souhaitée en conséquence.
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 changez la référence par défaut de "python" en Python 3.x, puis un certain nombre de fonctions Python commenceront à générer des erreurs d'assertion.
Par exemple, sur Ubuntu, ' pip 'pour l'un ne fonctionnerait plus correctement à moins que vous n'ayez directement édité le fichier et changé le shebang en 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.
Mon point ici est que vous provoqueriez une quantité importante de code pour commencer à lancer des erreurs d'assertion juste pour que vous puissiez taper 'python' dans le terminal pour référencer Python 3.x.
Vous êtes beaucoup mieux avec l'utilisation de la commande 'python3' dans le terminal et le shebang'#!/usr / bin / env python3 ' dans votre Python 3.fichiers x.
Faire
cd ~gedit .bash_aliases
ensuite, écrivez soit
alias python=python3
ou
alias python='/usr/bin/python3'
Enregistrez le fichier, fermez le terminal et ouvrez-le à nouveau.
Lien
Je trouve très utile de simplement supprimer /usr / bin /python et/usr/bin / pip. Cela force tous les programmes à s'appuyer sur les commandes "python2" et "python3".
Bien que certains packages facultatifs et obsolètes dépendent de #!/usr/bin/python
pour travailler, je préférerais soumettre des correctifs à ces programmes plutôt que de continuer à faire des erreurs étranges et parfois difficiles à déboguer.
cat > /usr/local/bin/py << 'EOF'#!/bin/dashpython3 "$@"EOF
(à condition que vous ayez l'autorisation d'écrire dans /usr / local / bin) de même
cat > /usr/local/bin/pyi << 'EOF'#!/bin/dashpython3 -i "$@"EOF
ensuite, vous ne tapez que py (et utilisez py en #! lignes) pour votre python choisi.
Juste un avertissement: N’essayez pas de changer le lien symbolique /usr/bin/python pour pointer vers python3 au lieu de 2.7. De nombreux programmes disponibles dans les dépôts Ubuntu nécessitent que /usr / bin / python soit compatible avec python 2.x.
Sur une autre note, quiconque vient ici parce qu’il essaie d’apprendre à faire de Python 3 sa valeur par défaut, peut plutôt trouver une utilisation dans la recherche d’environnements virtuels (par exemple virtualenv) ou de conteneurs (par exemple LXC ou Docker).
@wjandrea, oui, même dans un environnement virtuel 'python
devrait être conservé comme signifiant ‘python2’. Je voulais dire mon commentaire comme un moyen d’avoir une version Python spécifique à l’application au lieu d’essayer de contourner le Python du système.
Ah, maintenant j’ai compris ce que tu voulais dire par mise à niveau… En fait, les développeurs Ubuntu travaillent là-dessus: Python/3 - Ubuntu Wiki " C’est un objectif de sortie pour Ubuntu 14.04 LTS de n’avoir que Python 3 sur les images du CD de bureau."
En référence à l’avertissement de soulsource en haut, voir [PEP 394] (PEP 394 – The “python” Command on Unix-Like Systems | peps.python.org) qui normalise les conventions de nommage pour les exécutables Python coexistants et sur lesquelles les programmeurs Python et les mainteneurs de paquets s’appuient (et devraient) s’appuyer.
'sudo apt install python-is-python3` (pour Ubuntu 20.04+)
@ soulsource, oui, j’en suis conscient. c’est pourquoi j’ai demandé s’il y avait une option de “mise à niveau” disponible ou non.
Je pense que la réponse de Radu Rădeanu est déjà assez proche de la solution optimale. Il ne s’applique qu’à un seul utilisateur et n’est en vigueur que pour exécuter directement python en tapant la commande python, sans affecter les programmes avec un #!/usr/bin / shebang python.
@ soulsource c’est ce que je recherche! merci!
@Kevin Je viens d’essayer d’utiliser un virtualenv, mais dès que j’ai ouvert Gedit à partir du terminal, j’ai eu un tas d’erreurs car ses plugins semblent avoir besoin de Python 2. Des problèmes similaires pourraient se produire pour tout autre logiciel qui repose sur la commande python
étant Python 2.