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 ?

Giri
quelle
30
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.

Zum Beispiel:

$ python --version
Python 2.7.6
$ python3 --version
Python 3.4.3
$ alias python=python3
$ python --version
Python 3.4.3

Verwenden Sie den commandintegrierten Befehl, um den Alias ​​zu umgehen :

$ command python --version
Python 2.7.6

Eine andere Möglichkeit, den Alias ​​zu umgehen, besteht darin, ihn \vor dem Befehl zu verwenden.

$ \python --version 
Python 2.7.6

Um den Alias ​​in der aktuellen Shell zu deaktivieren, verwenden Sie den unaliaseingebauten Befehl:

$ unalias python
$ python --version
Python 2.7.6
Radu Rădeanu
quelle
1
also keine "upgrade" Option .. ??
Giri
4
Eigentlich möchte ich 2.7 auslöschen und durch 3.3 ersetzen. Scheint, es ist eine schlechte Idee für jetzt ..
Giri
35
+1 Es gibt keinen Grund 2.7 zu löschen, um mit 3.3 arbeiten zu können. Wie viel Software noch von 2.7 abhängt; Lass es einfach so.
don.joey
6
@begueradj Ein Alias unterscheidet sich grundlegend von einem symbolischen Link .
Radu Rădeanu
1
Ein Wort der Vorsicht: Dies kann andere Skripte beschädigen, die Python 2.7 erwarten.
kmiklas
85

[Juni 2016] Der empfohlene Ort für Informationen zum Übergang ist die offizielle Ubuntu Python- Seite.


Aus dem Ubuntu-Wiki :

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.

Kevin
quelle
1
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.

Sie können das Befehlszeilentool ausprobieren update-alternatives.

$ sudo update-alternatives --config python

Wenn Sie die Fehlermeldung "Keine Alternativen für Python" erhalten, richten Sie selbst eine Alternative mit dem folgenden Befehl ein:

$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10

Ändern Sie den Pfad /usr/bin/python3zu Ihrer gewünschten Python-Version entsprechend.

Webwurst
quelle
19
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.

Moony
quelle
2

Machen

cd ~
gedit .bash_aliases

dann schreibe entweder

alias python=python3

oder

alias python='/usr/bin/python3'

Speichern Sie die Datei, schließen Sie das Terminal und öffnen Sie es erneut.
Verknüpfung

Brise
quelle
1

Sie können Symlink /usr/bin/pythonzu python3mit

sudo ln -s /usr/bin/python3 /usr/bin/python

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.

Boris
quelle
2
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.
wjandrea
* python->/usr/bin/python
wjandrea
0
cat > /usr/local/bin/py
#!/bin/dash
python3 "$@"
<CTRL-D>

(vorausgesetzt, Sie haben Schreibrechte für / usr / local / bin)

cat > /usr/local/bin/pyi
#!/bin/dash
python3 -i "$@"
<CTRL-D>

Dann geben Sie nur py (und verwenden py in #! -Zeilen) für das von Ihnen gewählte Python ein.

John Allsup
quelle
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.

Erik Aronesty
quelle
-1

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.

Machen Sie dasselbe mit python2.7 und python 3.3

dcanelhas
quelle
2
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.
chaskes
Hier ist i guter Schritt für Schritt Lösung gefunden linuxconfig.org/...
Woto
Python 2 und 3 sind keine Alternativen - auch andere Nebenversionen nicht ( zB ). Diese Methode kann leicht Dinge zerbrechen.
wjandrea
Dies ist auch ein Duplikat dieser Antwort
wjandrea