Pourquoi python 3 n'est-il pas le binaire python par défaut?

42

Je tape pythondans une fenêtre de terminal. Je reçois Python 2.7 et non pas Python 3.5. Selon la documentation, Python 3.5 devrait être préchargé.

Givonz
la source
1
Si vous configurez un environnement virtuel avec: "python3 -m venv my-venv", activez-le depuis n'importe quel terminal en appelant "source ... / my-env / bin / activate", python 3.5 deviendra alors le défaut dans ce terminal. Vous pouvez vérifier la version par défaut actuelle en appelant "python -V".
Craig Hicks
Bien que votre réponse soit utile, j'ai demandé pourquoi. pas comment. et c'est le grand débat. ici. pourquoi une version plus ancienne par défaut, au lieu de la version actuelle.
Givonz
1
Vous avez tout à fait raison à propos de mon "commentaire"! C'est pourquoi j'ai écrit un commentaire et non une réponse.
Craig Hicks

Réponses:

56

Je ne sais pas quels "docs" vous lisez ni ce qu'ils disent, mais il ne /usr/bin/pythons'agit que d'un lien symbolique vers la version par défaut de python, dans ce cas 2.7, qui résulte du simple fait de taper pythonsur le terminal. C’est le résultat du PEP 394 qui définit

  • pour le moment, toutes les distributions doivent s'assurer que se pythonréfère à la même cible quepython2 .

type pythonet vous file /usr/bin/pythonle confirmerez.

La raison de cet arrangement autre que la convention est que le paquet source python-default par défaut dans Xenial est la version 2.7.11 , de sorte que le lien symbolique python pointe vers cette version.

Pour utiliser python 3, vous devez être explicite et taper python3dans la ligne de commande, ce qui est recommandé si vous avez besoin d'une version spécifique. Vous pouvez également le faire avec python 2, en tapant python2. Ubuntu inclut les versions 2 et 3 de Python par défaut sur toutes les versions actuelles.

Il est prévu de tout migrer vers Python 3 et de le marquer comme défaut.

Braiam
la source
Ceci est probablement en train de briser le plugin rhythmbox-zeitgeist qui dépend de zeitgeiigeist-python3 mais n’a pas pu le trouver.
Khurshid Alam
2
C’est le document que l’OP signifie.
SaidbakR
10

Pour obtenir le REPL Python 3.5 ou exécuter un script compatible, tapez python3. Cela permet de maintenir la compatibilité avec tous les anciens Python 2.x (qui ont toujours été et resteront liés python).

Le tiret pourrait trouver pythonsi vous configurez un .desktopfichier pour lui (en ~/.local/share/applications/), pour ouvrir un terminal et démarrez le REPL par exemple. Il n’existe pas d’environnement REPL par interface graphique par défaut pour python et les attentes normales en matière d’interface sont que l’utilisateur accède au terminal.

Parler de Python 3.5 par défaut concerne les responsables qui portent tous les scripts système de python 2.x à python 3.x, et non pas que python 3 remplacerait python 2 dans tous les cas.

Andrew Keech
la source
Donc, je suppose que la bonne question est, comment puis-je ajouter python3 dans mon chemin, afin qu'il s'exécute automatiquement?
Givonz
voulez-vous dire, comment obtenez-vous des scripts python à exécuter comme un programme compilé?
Andrew Keech
je l'ai Merci. Il suffit de taper python3 à l'invite de commande.
Givonz
2
AIUI quoi faire avec / usr / bin / python à long terme reste une question ouverte. La meilleure pratique pour les scripts python2 serait d'utiliser explicitement python2.
Peter Green
1
Plutôt que d'utiliser #!/usr/bin/python3(ou #!/usr/bin/python2) dans des scripts, utilisez plutôt (uniquement pour Python) #!/usr/bin/env python3si vous voulez qu'il soit portable à distance. Pour l’essentiel, il ne s’agit que de documentation, puisqu’on l’appellera de $ python3 your_pyprogram.pytoute façon.
Michael
4

Vous supposez que le Python par défaut devrait être disponible en tant que python. Cette hypothèse est fausse.

Sur un système livré avec Python 3 «préchargé» et aucun Python 2, il y en aura seulement python3et pas python.

Le code écrit pour Python 3 devrait toujours rechercher un interpréteur appelé python3. Le code écrit pour Python 2 recherchera historiquement python.

Il pourrait arriver un moment, peut-être dans quelques décennies, où presque personne ne se souviendra de Python 2, auquel il pythonpourrait commencer à se référer python3. Ce serait purement pratique, et peut et ne doit pas être fait prématuré, voire pas du tout! Il n'y a pas de hâte, à cause de l'impact suivant:

Les «anciens systèmes» actuels n’auront aucune connaissance de python2, pythonil est donc logique de garder le code Python 2 à la recherche de python. C’est la raison pour laquelle il pythonconvient de faire référence à Python 2 pour “tant que le code Python 2 existe”.

Le nouveau code écrit pour Python 2, si cela a du sens, peut parfaitement chercher python. Il pourrait également rechercher python2, s’il est conçu pour ne fonctionner que sur des systèmes bien consciencieux et pris en charge par Python 3 (qui devraient offrir un tel lien).

L’utilisation du code Python 2 présente l’avantage de python2ne pas avoir à toucher une fois pythonde plus python3, ce qui pourrait ne jamais se produire ou une fois pythondisparaître, ce qui pourrait ou non se produire. (Cela pourrait devenir réalité si le code Python 2 disparaissait après que l'hypothétique Python 4 devienne populaire avec son interpréteur python4. - Parce que le laisser pointer sur l'un python3ou sur l'autre python4serait déroutant.)

Robert Siemer
la source
2

Python les deux versions 2.x, 3.x sont disponibles. si vous appelez python comme il est pointé sur python 2.x, il chargera python 2.x

L'image ci-dessous vous aidera.

entrez la description de l'image ici

rɑːdʒɑ
la source
1
Comment tapez-vous la même commande et obtenez 2 résultats différents?
Givonz
4
le résultat différent lors de la deuxième invocation de pythonest à l'aide <tab>de l'interrogation de l'auto-compléteur, qui affiche ensuite les permutations possibles python*et vous renvoie à une nouvelle invite.
Andrew Keech
@givonz, hmm j'ai utilisé la touche TAB bro. sa pas sortie. il est possible modèle binaire.
dimanche
Vote négatif pour quoi?
dimanche
2
Je n'ai pas voté vers le bas mais je pense que la réponse devrait expliquer pourquoi les 2 premiers résultats sont différents et quel est le rôle de apt-cache, en particulier pour les débutants sous Ubuntu.
AL
2

Python 3.x devrait fonctionner avec 16.04 - En fait, cela fonctionnera définitivement. J'ai Ubuntu 14.04 et Python 3.4.3 - Tout ce que vous avez à faire pour le tester est de taper python3et il devrait vous indiquer la version que vous utilisez.

Danny
la source
2
Eh bien, je n’appellerais pas en utilisant un système informatique OS. Et à proprement parler: Ubuntu est un système d’exploitation basé sur Linux et non sur Unix.
magu_
Je n'ai pas encore compris le diff bet linux & unix en plus des invites de commande et des commandes différemment, mais étroitement formulées. bien que l'interface graphique soit bien plus avancée que ce que je vois dans solaris.
Givonz
1
-1 Cela ne répond pas à la question de savoir pourquoi .
David Foerster