Wie kann man Python 3 mit dem Programmbefehl 'python' ausführen?
331
Der pythonProgrammbefehl führt Python 2 aus. Python 3 kann mit dem python3Befehl ausgeführt werden . Wie kann Python 3 mit dem pythonBefehl ausgeführt werden ?
Nur eine Warnung: Versuchen Sie nicht, den Symlink / usr / bin / python so zu ändern, dass er auf python3 anstatt auf 2.7 zeigt. Viele Programme, die in den Ubuntu-Repos verfügbar sind, setzen voraus, dass / usr / bin / python mit Python 2.x kompatibel ist.
Quelle
1
Ah, jetzt habe ich verstanden, was Sie mit Upgrade gemeint haben ... Tatsächlich arbeiten die Ubuntu-Entwickler daran: wiki.ubuntu.com/Python/3 "Es ist ein Release-Ziel für Ubuntu 14.04 LTS, nur Python 3 auf der Desktop-CD zu haben Bilder. "
Quelle
1
Außerdem kann jeder, der hierher kommt, um zu lernen, wie man Python 3 zu seinem Standard macht, bei der Suche nach virtuellen Umgebungen (z. B. virtualenv) oder Containern (z. B. LXC oder Docker) Verwendung finden.
Kevin
1
In Bezug auf die Warnung von soulsource oben wird auf PEP 394 verwiesen, das die Namenskonventionen für koexistierende ausführbare Python-Dateien standardisiert und auf die sich Python-Programmierer und Paketbetreuer verlassen (und sollten).
David Foerster
2
@wjandrea, ja sogar in einer virtuellen Umgebung, pythonsollte als Bedeutung beibehalten werden python2. Ich meinte meinen Kommentar als eine Möglichkeit, eine anwendungsspezifische Python-Version zu haben, anstatt zu versuchen, das Python des Systems zu umgehen.
Kevin
Antworten:
370
Ein einfacher und sicherer Weg wäre die Verwendung eines Alias. Legen Sie dies in ~/.bashrcoder ~/.bash_aliasesDatei:
alias python=python3
Führen Sie nach dem Hinzufügen des Obenstehenden in der Datei source ~/.bashrcoder aus source ~/.bash_aliases.
Sowohl Ubuntu und Debian haben wir laufende Projektziele zu Python 3 der Standard bevorzugter Python - Version in dem Distros zu machen.
Was das nicht heißt:
/usr/bin/pythonwird auf Python 3 verweisen. Nein, dies wird nicht passieren (es sei denn, PEP 394 befürwortet etwas anderes, was auf absehbare Zeit zweifelhaft ist). /usr/bin/pythonund /usr/bin/python2verweist auf Python 2.7 und /usr/bin/python3auf die neueste unterstützte Python 3-Version.
Python 2 wird aus dem Archiv entfernt. Nein, das wird nicht passieren . Wir gehen davon aus, dass Python 2.7 noch lange in Ubuntu unterstützt und verfügbar sein wird, da PEP 373 einen Upstream-Support für die Fehlerbehebung bis 2020 verspricht.
Es wird nicht empfohlen, den symbolischen Link wegen anderer Paketabhängigkeiten zu ändern, aber sie haben "laufende Projektziele, um Python 3 zur bevorzugten Standard-Python-Version in den Distributionen zu machen".
Für CLI Verwendung, wie @Radu Rădeanu , würde ich empfehlen , einen Aliasnamen in dem Benutzer setzen ~/.bashrc, .bash_aliasesDatei (die verschiedenen Dateien, einschließlich ~/.bash_profile, mindestens einmal, bin meist für organisatorische Zwecke geladen, aber nach Plattform variieren). Virtuelle Python- Umgebungen funktionieren ebenfalls gut.
Alias-Beispiele:
alias python=python3
oder
alias python='/usr/bin/python3'
Skripte sollten trotzdem so etwas wie #!/usr/bin/env python3Cross-Kompatibilität verwenden.
Die Verwendung envist für die gemischte Verwendung mit virtuellen Umgebungen geeignet.
Hinweis (danke an @wjandrea): Aliase sind Teil der Bash-Laufzeit, nicht der Benutzerumgebung. Daher stehen sie dem shebang ( #!) nicht zur Verfügung . Wenn Sie den Alias python = python3 bevorzugen, können einige program.pyohne Shebang ausgeführt werden, indem Sie den Aliasinterpreter wie diesen aufrufen python program.py. Aliasing kann auch für Systeme mit mehreren Python3-Versionen wie 3.4 und 3.6 zusammen nützlich sein.
Dies scheint veraltet zu sein: Sie planten, Python2 in Xenial zu entfernen, taten dies jedoch nicht.
OrangeDog
1
@OrangeDog, danke für das Update. Ja, die Wiki-Seite, die ich zitiert habe, ist jetzt als veraltet gekennzeichnet, da in den letzten zwei Jahren weitere Fortschritte erzielt wurden, da nur Python 3 verwendet wurde. Die neue Seite, die diesem Fortschritt folgt, ist die offizielle Ubuntu-Python-Seite .
Kevin
Die "neueste" Seite ist auch in Bezug auf die Pläne für Xenial veraltet.
OrangeDog
Ich würde nicht sagen, dass es "veraltet" ist, sondern "es wurde in letzter Zeit nicht aktualisiert". Es scheint immer noch der aktuelle Ort zu sein, an dem Beiträge zu diesem Thema gepostet werden. In den Kommentaren hier würde ich mich jedoch über alle anderen neuen Quellen freuen, die jemand finden könnte. Das Hinzufügen weiterer Quellen zu meiner Antwort, warum man die Änderung nicht auf "nur" vornimmt python, ist nicht wirklich relevant, bis die Konvertierung abgeschlossen ist. Sogar dann kann es gerade ein Nicht-Problem werden.
Kevin
2
Aliase sind intern in Bash enthalten und nicht Teil der Umgebung. Sie müssen sie also weiterhin python3in einem Shebang verwenden, nicht python.
wjandrea
28
Update: Das ist der falsche Weg, da Python2 und Python3 nicht austauschbar sind.
python2 und python3 sind keine Alternativen. Verwenden Sie für diesen Zweck keine Update-Alternativen.
Jobin
Warum sind sie nicht? Kann einer von euch bitte erklären, warum update-alternativessich Python nicht eignet? Liegt es an legacy.python.org/dev/peps/pep-0394 ?
Dmitry Grigoryev
11
Alternativen sind unterschiedliche Implementierungen für die gleichen Funktionalitäten. python2 und python3 bieten nicht dieselben Funktionen.
Ely
Sie können so etwas tun, wenn Sie andere Versionen von python3 manuell (über ppa oder was auch immer) installiert haben. sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 2
David Baucum
Dies ist, was ich für einen 18.04.2-VM tun musste, der nicht mit Python kommt. Vielen Dank
Dark Star1
9
Ubuntu und der Rest der Linux-Distributionen sind in Bezug auf eine Reihe von Anwendungen und Befehlen immer noch stark von Python 2.7 abhängig. Wenn Sie die Standardreferenz von "python" in Python 3.x ändern, werden bei einer Reihe von Python-Funktionen Assertionsfehler ausgegeben.
Unter Ubuntu würde beispielsweise "pip" nicht mehr korrekt ausgeführt, wenn Sie die Datei nicht direkt bearbeitet und den shebang in "#! / Usr / bin / env python2.7" geändert haben. Unter RHEL-Versionen (Red Hat Enterprise Linux) wie Red Hat, Fedora und CentOS ist der Befehl 'Yum' auch von Python 2.7 abhängig.
Mein Punkt hier ist, dass Sie eine erhebliche Menge an Code veranlassen würden, Assertionsfehler auszulösen, nur damit Sie 'python' in das Terminal eingeben könnten, um auf Python 3.x zu verweisen.
Sie sind viel besser dran, wenn Sie den Befehl 'python3' im Terminal und den Befehl '#! / Usr / bin / env python3' in Ihren Python 3.x-Dateien verwenden.
und Sie können verhindern, dass Python 2 und pip2 als Abhängigkeit mit installiert werden
sudo apt-mark hold python python-pip
Lesen Sie in den anderen Antworten nach, warum Sie dies möglicherweise nicht tun möchten. Ubuntu 18.04+ wird nicht mehr mit Python 2 ausgeliefert, es sollte also nicht so schlimm sein.
In Bezug auf "Ubuntu 18.04 wird nicht mehr mit Python 2 geliefert, es sollte also nicht so schlimm sein." Unter Ubuntu (auch in Versionen, in denen Python 2 nicht standardmäßig installiert ist) pythonwird angenommen, dass eine aufgerufene ausführbare Datei Python 2 ist, sodass dies einige Probleme verursachen kann.
Wäre es nicht einfacher, einen Symlink zu verwenden? sudo ln -s /usr/bin/python3 /usr/local/bin/py
wjandrea
0
Ich finde es sehr hilfreich, einfach / usr / bin / python und / usr / bin / pip zu entfernen. Dies zwingt alle Programme, sich auf die Befehle "python2" und "python3" zu verlassen.
Obwohl einige optionale und veraltete Pakete von #!/usr/bin/pythonder Arbeit abhängen , würde ich lieber Patches an diese Programme senden, als weiterhin seltsame und manchmal schwer zu debuggende Fehler zu machen.
Mit können Sie update-alternativesverschiedene Versionen von Programmen bereitstellen, die aufgrund von Kompatibilitätsproblemen möglicherweise zu unterschiedlichen Zeiten benötigt werden.
Diese Antwort ist ein gutes Beispiel dafür, wie man Dinge einrichtet, um beispielsweise verschiedene Versionen von gcc / g ++ gleichzeitig zu verwalten.
Anfänger sind möglicherweise nicht in der Lage, die verknüpfte Antwort einfach an eine andere Situation anzupassen. Zusätzlich zur Anerkennung der früheren Antwort wäre es gut, die für Python erforderlichen Schritte darzulegen.
python
sollte als Bedeutung beibehalten werdenpython2
. Ich meinte meinen Kommentar als eine Möglichkeit, eine anwendungsspezifische Python-Version zu haben, anstatt zu versuchen, das Python des Systems zu umgehen.Antworten:
Ein einfacher und sicherer Weg wäre die Verwendung eines Alias. Legen Sie dies in
~/.bashrc
oder~/.bash_aliases
Datei:Führen Sie nach dem Hinzufügen des Obenstehenden in der Datei
source ~/.bashrc
oder aussource ~/.bash_aliases
.Zum Beispiel:
Verwenden Sie den
command
integrierten Befehl, um den Alias zu umgehen :Eine andere Möglichkeit, den Alias zu umgehen, besteht darin, ihn
\
vor dem Befehl zu verwenden.Um den Alias in der aktuellen Shell zu deaktivieren, verwenden Sie den
unalias
eingebauten Befehl:quelle
[Juni 2016] Der empfohlene Ort für Informationen zum Übergang ist die offizielle Ubuntu Python- Seite.
Aus dem Ubuntu-Wiki :
Es wird nicht empfohlen, den symbolischen Link wegen anderer Paketabhängigkeiten zu ändern, aber sie haben "laufende Projektziele, um Python 3 zur bevorzugten Standard-Python-Version in den Distributionen zu machen".
Für CLI Verwendung, wie @Radu Rădeanu , würde ich empfehlen , einen Aliasnamen in dem Benutzer setzen
~/.bashrc
,.bash_aliases
Datei (die verschiedenen Dateien, einschließlich~/.bash_profile
, mindestens einmal, bin meist für organisatorische Zwecke geladen, aber nach Plattform variieren). Virtuelle Python- Umgebungen funktionieren ebenfalls gut.Alias-Beispiele:
oder
Skripte sollten trotzdem so etwas wie
#!/usr/bin/env python3
Cross-Kompatibilität verwenden.Die Verwendung
env
ist für die gemischte Verwendung mit virtuellen Umgebungen geeignet.Hinweis (danke an @wjandrea): Aliase sind Teil der Bash-Laufzeit, nicht der Benutzerumgebung. Daher stehen sie dem shebang (
#!
) nicht zur Verfügung . Wenn Sie den Alias python = python3 bevorzugen, können einigeprogram.py
ohne Shebang ausgeführt werden, indem Sie den Aliasinterpreter wie diesen aufrufenpython program.py
. Aliasing kann auch für Systeme mit mehreren Python3-Versionen wie 3.4 und 3.6 zusammen nützlich sein.quelle
python
, ist nicht wirklich relevant, bis die Konvertierung abgeschlossen ist. Sogar dann kann es gerade ein Nicht-Problem werden.python3
in einem Shebang verwenden, nichtpython
.Update: Das ist der falsche Weg, da Python2 und Python3 nicht austauschbar sind.
Sie können das Befehlszeilentool ausprobieren
update-alternatives
.Wenn Sie die Fehlermeldung "Keine Alternativen für Python" erhalten, richten Sie selbst eine Alternative mit dem folgenden Befehl ein:
Ändern Sie den Pfad
/usr/bin/python3
zu Ihrer gewünschten Python-Version entsprechend.quelle
update-alternatives
sich Python nicht eignet? Liegt es an legacy.python.org/dev/peps/pep-0394 ?sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 2
Ubuntu und der Rest der Linux-Distributionen sind in Bezug auf eine Reihe von Anwendungen und Befehlen immer noch stark von Python 2.7 abhängig. Wenn Sie die Standardreferenz von "python" in Python 3.x ändern, werden bei einer Reihe von Python-Funktionen Assertionsfehler ausgegeben.
Unter Ubuntu würde beispielsweise "pip" nicht mehr korrekt ausgeführt, wenn Sie die Datei nicht direkt bearbeitet und den shebang in "#! / Usr / bin / env python2.7" geändert haben. Unter RHEL-Versionen (Red Hat Enterprise Linux) wie Red Hat, Fedora und CentOS ist der Befehl 'Yum' auch von Python 2.7 abhängig.
Mein Punkt hier ist, dass Sie eine erhebliche Menge an Code veranlassen würden, Assertionsfehler auszulösen, nur damit Sie 'python' in das Terminal eingeben könnten, um auf Python 3.x zu verweisen.
Sie sind viel besser dran, wenn Sie den Befehl 'python3' im Terminal und den Befehl '#! / Usr / bin / env python3' in Ihren Python 3.x-Dateien verwenden.
quelle
Machen
dann schreibe entweder
oder
Speichern Sie die Datei, schließen Sie das Terminal und öffnen Sie es erneut.
Verknüpfung
quelle
Sie können Symlink
/usr/bin/python
zupython3
mitund Sie können verhindern, dass Python 2 und pip2 als Abhängigkeit mit installiert werden
Lesen Sie in den anderen Antworten nach, warum Sie dies möglicherweise nicht tun möchten. Ubuntu 18.04+ wird nicht mehr mit Python 2 ausgeliefert, es sollte also nicht so schlimm sein.
quelle
python
wird angenommen, dass eine aufgerufene ausführbare Datei Python 2 ist, sodass dies einige Probleme verursachen kann.python
->/usr/bin/python
(vorausgesetzt, Sie haben Schreibrechte für / usr / local / bin)
Dann geben Sie nur py (und verwenden py in #! -Zeilen) für das von Ihnen gewählte Python ein.
quelle
sudo ln -s /usr/bin/python3 /usr/local/bin/py
Ich finde es sehr hilfreich, einfach / usr / bin / python und / usr / bin / pip zu entfernen. Dies zwingt alle Programme, sich auf die Befehle "python2" und "python3" zu verlassen.
Obwohl einige optionale und veraltete Pakete von
#!/usr/bin/python
der Arbeit abhängen , würde ich lieber Patches an diese Programme senden, als weiterhin seltsame und manchmal schwer zu debuggende Fehler zu machen.quelle
Mit können Sie
update-alternatives
verschiedene Versionen von Programmen bereitstellen, die aufgrund von Kompatibilitätsproblemen möglicherweise zu unterschiedlichen Zeiten benötigt werden.Diese Antwort ist ein gutes Beispiel dafür, wie man Dinge einrichtet, um beispielsweise verschiedene Versionen von gcc / g ++ gleichzeitig zu verwalten.
Machen Sie dasselbe mit python2.7 und python 3.3
quelle