Warum ist Python 3 nicht die Standard-Python-Binärdatei?


42

Ich tippe pythonin ein Terminalfenster. Ich bekomme Python 2.7 und nicht Python 3.5. Laut Dokumentation sollte Python 3.5 vorinstalliert sein.


1
Wenn Sie eine virtuelle Umgebung mit "python3 -m venv my-venv" einrichten, aktivieren Sie diese virtuelle Umgebung von einem beliebigen Terminal aus, indem Sie "source ... / my-env / bin / activate" aufrufen Standard in diesem Terminal. Sie können die aktuelle Standardversion überprüfen, indem Sie "python -V" aufrufen.
Craig Hicks

Während Ihre Antwort hilfreich ist, fragte ich warum. nicht wie. und das ist die große Debatte. Hier. Warum sollte eine ältere Version standardmäßig anstelle der aktuellen Version verwendet werden?
Givonz

1
Du bist genau richtig in Bezug auf meinen "Kommentar"! Deshalb habe ich einen Kommentar und keine Antwort geschrieben.
Craig Hicks

Antworten:


56

Ich weiß nicht, welche "Dokumente" Sie lesen oder was sie sagen, aber das /usr/bin/pythonist nur eine symbolische Verknüpfung zur Standardversion von Python, in diesem Fall 2.7, die das Ergebnis der Eingabe pythonauf dem Terminal ist. Dies ist das Ergebnis von PEP 394, das dies definiert

  • vorerst sollten alle ausschüttungen sicherstellen, dass sie pythonsich auf dasselbe ziel beziehen wiepython2 .

type pythonund file /usr/bin/pythonwird dies bestätigen.

Der Grund für diese andere Anordnung als die Konvention ist, dass das Quellpaket python-defaults in Xenial die Version 2.7.11 ist , sodass der symbolische Python-Link auf diese Version verweist.

Um Python 3 zu verwenden, müssen Sie explizit sein und python3die Befehlszeile eingeben python2. Dies wird empfohlen, wenn Sie eine bestimmte Version benötigen. Dies kann auch mit Python 2 erfolgen, indem Sie Folgendes eingeben . Ubuntu enthält in allen aktuellen Versionen standardmäßig sowohl Python 2 als auch Python 3.

Es ist geplant, alles auf Python 3 zu migrieren und als Standard festzulegen.


Dies ist wahrscheinlich das fehlerhafte Rhythmbox-Zeitgeist-Plugin, das von zeitgeiigeist-python3 abhängt, es aber nicht finden konnte.
Khurshid Alam

2
Dies ist das Dokument , das das OP bedeutet.
SaidbakR

10

Geben Sie Folgendes ein, um Python 3.5 REPL abzurufen oder ein kompatibles Skript auszuführen python3. Dies dient der Aufrechterhaltung der Kompatibilität mit allen älteren Python 2.x-Versionen (die immer mit Python 2.x verknüpft waren und bleiben python).

Der Bindestrich könnte herausfinden, pythonob Sie eine .desktopDatei dafür eingerichtet haben (in ~/.local/share/applications/), um ein Terminal zu öffnen und beispielsweise die REPL zu starten. Es gibt keine Standard-GUI-REPL-Umgebung für Python, und normale Benutzeroberflächenerwartungen bestehen darin, dass der Benutzer zum Terminal wechselt.

Die Rede davon, dass Python 3.5 der Standard ist, ist, dass die Betreuer alle Systemskripte von Python 2.x auf Python 3.x portieren, nicht, dass Python 3 Python 2 in allen Fällen ersetzen würde.


Ich denke, die richtige Frage ist, wie füge ich Python3 in meinen Pfad ein, damit es automatisch ausgeführt wird.
Givonz

Meinen Sie, wie bringen Sie Python-Skripte dazu, wie ein kompiliertes Programm ausgeführt zu werden?
Andrew Keech

Habe ich, danke. Geben Sie einfach python3 an der Eingabeaufforderung ein.
Givonz

2
AIUI, was man langfristig mit / usr / bin / python machen soll, ist noch eine offene Frage. Best Practice für Python2-Skripte wäre, Python2 explizit zu verwenden.
Peter Green

1
Anstatt #!/usr/bin/python3(oder #!/usr/bin/python2) in Skripten zu verwenden, ist es besser (nur für Python, speziell), #!/usr/bin/env python3wenn Sie möchten, dass es remote portierbar ist. Dies ist größtenteils nur eine Dokumentation, da sie in vielen Fällen $ python3 your_pyprogram.pyohnehin als using bezeichnet wird.
Michael

4

Sie gehen davon aus, dass das Standard-Python als verfügbar sein sollte python. Diese Annahme ist falsch.

Auf einem System, auf dem Python 3 „vorinstalliert“ und kein Python 2 installiert ist, wird es nur python3und kein Python 2 geben python.

Code, der für Python 3 geschrieben wurde, sollte immer nach einem Interpreter mit dem Namen suchen python3. Code, der für Python 2 geschrieben wurde, wird in der Vergangenheit gesucht python.

Es könnte in vielleicht Jahrzehnten einen Zeitpunkt geben, an dem sich fast niemand mehr an Python 2 erinnert, wenn pythonsich jemand darauf zu beziehen beginnt python3. Dies dient lediglich der Bequemlichkeit und kann und sollte, wenn überhaupt, nicht verfrüht erfolgen! Es gibt keine Eile wegen der folgenden Auswirkungen:

"Aktuelle alte" Systeme haben nur keine Kenntnis davon python2, pythondaher ist es absolut sinnvoll, Python 2-Code weiterhin zu suchen python. Dies ist der Grund, warum Sie pythonPython 2 als "solange Python 2-Code existiert" bezeichnen sollten.

Neuer Code für Python 2, wenn das Sinn macht, kann perfekt suchen python. Es könnte auch danach suchen python2, ob es nur auf Python 3-fähigen und gepflegten Systemen laufen soll (die einen solchen Link bieten sollten).

Der Vorteil der Verwendung von Python 2-Code besteht python2darin, dass keine zusätzlichen Berührungen erforderlich sind, sobald pythonder Verweis beginnt python3, was möglicherweise nie pythonoder gar nicht geschieht, was möglicherweise oder möglicherweise nicht geschieht. (Das könnte wahr werden , wenn Python - 2 - Code ausstirbt nach hypothetische Python 4 mit seinem Dolmetscher populär wird python4-. Denn es läßt darauf entweder python3oder python4beide verwirrend wäre.)


2

Python 2.x, 3.x Versionen sind verfügbar. Wenn Sie Python aufrufen, während es auf Python 2.x zeigt, wird Python 2.x geladen

Das folgende Bild wird Ihnen helfen.

Bildbeschreibung hier eingeben


1
Wie können Sie den gleichen Befehl eingeben und 2 unterschiedliche Ergebnisse erhalten?
Givonz

3
Die andere Ausgabe des zweiten Aufrufs von pythonergibt sich aus <tab>der Abfrage des Autocompleters, der dann die möglichen Permutationen ausgibt python*und Sie zu einer neuen Eingabeaufforderung zurückbringt.
Andrew Keech

@givonz, hmm ich habe die Tabulatortaste bro benutzt. es wird nicht ausgegeben. es ist möglich, binäres Muster.
Donnerstag,

Negative Stimme für was?
Donnerstag,

1
Ich habe nicht abgelehnt, aber ich denke, dass die Antwort erklären sollte, warum die 2 ersten Ausgänge unterschiedlich sind und welche Rolle sie spielt apt-cache, insbesondere für Ubuntu-Anfänger.
AL

2

Python 3.x sollte mit 16.04 funktionieren - Eigentlich wird es definitiv funktionieren. Ich habe Ubuntu 14.04 und ich habe Python 3.4.3 - Alles, was Sie tun müssen, um es zu testen, ist eintippen python3und es sollte Ihnen sagen, welche Version Sie ausführen.


2
Nun, ich würde nicht mit einer OS-Informatik anrufen. Und genau genommen: Ubuntu ist ein Linux-basiertes Betriebssystem und kein Unix-basiertes.
magu_

Ich habe die Unterschiede zwischen Linux und Unix noch nicht verstanden, abgesehen von einigen Eingabeaufforderungen und anderen, aber genau formulierten Befehlen. obwohl die GUI weitaus weiter fortgeschritten ist als das, was ich in Solaris sehe.
Givonz

1
-1 Damit wird die Frage nach dem Warum nicht beantwortet .
David Foerster
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.