Zwei Versionen von Python unter Linux. wie man 2.7 zum Standard macht

124

Ich habe zwei Versionen von Python auf meiner Linuxbox:

$python
Python 2.6.6 (r266:84292, Jul 10 2013, 22:48:45) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 


$ /usr/local/bin/python2.7
Python 2.7.3 (default, Oct  8 2013, 15:53:09) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

$ which python
/usr/bin/python
$ ls -al /usr/bin/python
-rwxr-xr-x. 2 root root 4864 Jul 10 22:49 /usr/bin/python

Wie kann ich 2.7 zur Standardversion machen, damit ich bei pythonder Eingabe 2.7 bekomme?

Anthony
quelle
1
Als ich dies meinem Fedora angetan habe, hat das Yum oder Apt-Get nicht mehr funktioniert.
Benutzer
@User: Ja, ich habe eine alte Mandrake auf ähnliche Weise gebrochen (eine Änderung /usr/bin/env pythonauf 2,6 anstelle von 2,3 bedeutete die Hälfte der Befehle rpmund alle urpmifunktionierten nicht mehr).
Abarnert
Ich habe den folgenden Schritt ausgeführt, um Django unter Centos 5 zu installieren: 1. Installieren Sie Python 3.6 aus dem Quellcode. 2. Geben Sie in der Shell den folgenden Befehl ein: "alias python = / usr / local / bin / python3.6". 3. Führen Sie den folgenden Befehl aus, um Django zu installieren. "Pip3 install Django". 4.: "python -m django --version", um die zu überprüfen Django installiert mit Version "1.10.5"
Showmyroutes
Für mich /usr/bin/pythonwar ein weicher Link, auf den verwiesen wurde python2. Ich habe es gerade geändert inpython3.6
Munish

Antworten:

173

Sie möchten Ihr Standard-Python wahrscheinlich nicht wirklich ändern.

Ihre Distribution hat ein Standardsystem in Python installiert /usr/binund verfügt möglicherweise über Skripte, die davon abhängen, dass diese vorhanden sind und von ausgewählt werden #! /usr/bin/env python. Normalerweise können Sie Python 2.6-Skripte in 2.7 ausführen, aber möchten Sie dies riskieren?

Darüber hinaus kann das Monkeying mit /usr/bindie Fähigkeit Ihres Paketmanagers zur Verwaltung von Paketen beeinträchtigen. Und das Ändern der Reihenfolge der Verzeichnisse in Ihrem PATHTestament wirkt sich neben Python auf viele andere Dinge aus. (Tatsächlich ist es üblicher, /usr/local/binvoraus zu sein /usr/bin, und es kann das sein, was Sie tatsächlich wollen - aber wenn Sie es umgekehrt haben, gibt es vermutlich einen guten Grund dafür.)

Aber Sie müssen nicht brauchen Ihre Standard - Python ändern das System zu bekommen 2.7 zu laufen , wenn Sie eingeben python.


Zunächst können Sie einen Shell-Alias ​​einrichten:

alias python=/usr/local/bin/python2.7

Geben Sie dies an einer Eingabeaufforderung ein oder fügen Sie es in Ihre ein, ~/.bashrcwenn die Änderung dauerhaft sein soll. Wenn Siepython sie jetzt eingeben , wird die von Ihnen gewählte Version 2.7 ausgeführt. Wenn jedoch ein Programm auf Ihrem System versucht, ein Skript damit auszuführen, wird /usr/bin/env pythondie Standardversion 2.6 ausgeführt.


Alternativ können Sie einfach eine virtuelle Umgebung aus Ihrem 2.7 erstellen (oder separate Venvs für verschiedene Projekte) und Ihre Arbeit innerhalb des Venvs erledigen.

abarnert
quelle
1
:( Sie haben Recht. Leider hatte ich bereits einen neuen Symb-Link gemäß der Antwort von @ rohit erstellt. Jetzt yumfunktioniert mein Befehl nicht mehr! Ich habe versucht, den Sym-Link wieder zu erstellen, aber es funktioniert sudo ln -sf /usr/bin/python2.6 /usr/bin/pythonkeine Problemumgehung?
Anthony
@Anthony: Ich vermute, das /usr/bin/pythonwar vorher eigentlich kein Symlink, es war ein Wrapper-Skript oder eine ausführbare Datei, und jetzt haben Sie es überschrieben und können es nicht zurückbekommen. Wenn dies rpmnoch funktioniert, können Sie das Python-Paket manuell herunterladen und ohne installieren yum.
Abarnert
Ich kann immer noch zu 2.6 Interpreter kommen, wenn ich tippe, python2.6so dass es immer noch da ist.
Anthony
7
@Anthony: Und wenn dir in Zukunft jemand sagt, dass du etwas in / usr / bin (oder irgendwo in / usr außer / usr / local) ändern sollst, notiere dir, was da ist, und
mache
Was für ein schlimmes Durcheinander, in das ich mich hineingelegt habe !! Ich habe eine andere Centos-Box, die dieses Skript haben könnte. Wenn ich es von dort kopiere und in / usr / bin dieser Box lege. Glaubst du, es wird funktionieren?
Anthony
19

Fügen Sie /usr/local/binIhrer PATHUmgebungsvariablen früher in der Liste als hinzu /usr/bin.

Im Allgemeinen geschieht dies in der RC-Datei Ihrer Shell, z. B. für Bash, Sie würden dies in Folgendes einfügen .bashrc:

export PATH="/usr/local/bin:$PATH"

Dies führt dazu, dass Ihre Shell zuerst nach einem pythonIn sucht /usr/local/bin, bevor es mit dem In geht /usr/bin.

(Dies bedeutet natürlich, dass Sie auch darauf /usr/local/bin/pythonhinweisen müssen python2.7- wenn dies noch nicht geschehen ist, müssen Sie es mit einem Symlink verknüpfen.)

Bernstein
quelle
Möglicherweise muss PYTHONHOME entsprechend eingestellt / deaktiviert werden, wenn es von etwas eingestellt wird.
Marcin
1
Dies ist bei weitem nicht so gefährlich wie die Lösungen, die vorschlagen, / usr / bin selbst zu ändern… aber ich denke immer noch, dass es nicht das ist, was das OP eigentlich will.
Abarnert
Dies half mir nach dem Upgrade von Ubuntu 14.x auf 16.x
learn2day
4

Überprüfen Sie die aktuelle Version von Python durch:

$ python --version

Überprüfen Sie dann, ob Python ein symbolischer Link zu welcher Datei ist.

  $ ll /usr/bin/python

Ausgabe Bsp.:

 lrwxrwxrwx 1 root root 9 Jun 16  2014 /usr/bin/python -> python2.7*

Überprüfen Sie andere verfügbare Versionen von Python:

$ ls /usr/bin/python*

Ausgabe Bsp.:

/usr/bin/python     /usr/bin/python2.7-config  /usr/bin/python3.4         /usr/bin/python3.4m-config  /usr/bin/python3.6m         /usr/bin/python3m
/usr/bin/python2    /usr/bin/python2-config    /usr/bin/python3.4-config  /usr/bin/python3.6          /usr/bin/python3.6m-config  /usr/bin/python3m-config
/usr/bin/python2.7  /usr/bin/python3           /usr/bin/python3.4m        /usr/bin/python3.6-config   /usr/bin/python3-config     /usr/bin/python-config

Wenn Sie die aktuelle Version von Python in die Version 3.6 ändern möchten, bearbeiten Sie die Datei ~ / .bashrc:

vim ~/.bashrc

Fügen Sie die folgende Zeile am Ende der Datei hinzu und speichern Sie:

alias python=/usr/local/bin/python3.6

So installieren Sie pip für Python 3.6

$ sudo apt-get install python3.6 python3.6-dev
$ sudo curl https://bootstrap.pypa.io/ez_setup.py -o - | sudo python3.6
$ sudo easy_install pip

Überprüfen Sie bei Erfolg die aktuelle Version von pip:

$ pip3 -V

Ausgabe Bsp.:

pip 1.5.4 from /usr/lib/python3/dist-packages (python 3.6)
Shiv Buyya
quelle
3

Geben Sie den Befehl ein

which python

//output:
/usr/bin/python

cd /usr/bin
ls -l

Hier können Sie so etwas sehen

lrwxrwxrwx 1 root   root            9 Mar  7 17:04  python -> python2.7

Ihr Standard-Python2.7 ist mit dem Text 'Python' verknüpft.

Entfernen Sie also die Softlink-Python

sudo rm -r python

Wiederholen Sie dann den obigen Befehl

ls -l

Sie können sehen, dass der Softlink entfernt wurde

-rwxr-xr-x 1 root   root      3670448 Nov 12 20:01  python2.7

Erstellen Sie dann einen neuen Softlink für python3.6

ln -s /usr/bin/python3.6 Python

Versuchen Sie dann den Befehl pythonim Terminal

//output:
Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
[GCC 8.2.0] on linux

Geben Sie help, copyright, creditsoder licensefür weitere Informationen.

Sreenath
quelle
1
Ihr Beitrag ist keine Antwort auf die Frage von OP.
Frank
Dies löste ein sehr merkwürdiges Problem für mich. Wenn ich die Python-Version vom Root oder vom normalen Terminal aus überprüfe, wird 3.6.8 angezeigt. Wenn ich jedoch eine .sh-Datei erstelle und Python-Version darin eingebe, wird 2.7 gedruckt. Es stellte sich heraus, dass ein Softlink wie oben erwähnt vorhanden war. Befolgen Sie die Schritte und es ist behoben. Vielen Dank.
S4nd33p
Danke dir! Dies löste das Problem von "erforderlicher Python 3 oder höher"
Tamim Attafi
2

Alle Betriebssysteme werden mit einer Standardversion von Python geliefert und befinden sich in / usr / bin. Alle mit dem Betriebssystem gelieferten Skripte (z. B. yum) verweisen auf diese Python-Version in / usr / bin. Wenn Sie eine neue Version von Python installieren möchten, möchten Sie die vorhandenen Skripte nicht beschädigen, die möglicherweise nicht mit der neuen Version von Python funktionieren.

Der richtige Weg, dies zu tun, besteht darin, den Python als alternative Version zu installieren.

e.g.
wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2 
tar xf Python-2.7.3.tar.bz2
cd Python-2.7.3
./configure --prefix=/usr/local/
make && make altinstall

Auf diese Weise funktionieren die vorhandenen Skripte wie yum immer noch mit / usr / bin / python. und Ihre Standard-Python-Version ist die in / usr / local / bin installierte. dh wenn Sie Python eingeben, erhalten Sie 2.7.3

Das passiert weil. Die Variable $ PATH hat / usr / local / bin vor usr / bin.

/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

Wenn python2.7 immer noch nicht als Standard-Python-Version wirksam wird, müssten Sie dies tun

export PATH="/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"
Prakash Kamath
quelle
-8

Ich denke, Sie haben die 2.7-Version manuell installiert, während 2.6 aus einem Paket stammt?

Die einfache Antwort lautet: Deinstallieren Sie das Python-Paket.

Das komplexere ist: Nicht manuell in / usr / local installieren. Erstellen Sie ein Paket mit der Version 2.7 und aktualisieren Sie es anschließend.

Die Paketverarbeitung hängt davon ab, welche Distribution Sie verwenden.

emesik
quelle
5
Das Python-Paket wird mit ziemlicher Sicherheit von der Distribution benötigt. CentOS ist RPM-basiert und die Hälfte der RPM- und YUM-Tools ist in Python geschrieben.
Abarnert
Lieber Michael, bitte empfehlen Sie die Option, manuell installiertes Python2.7 zu deinstallieren!
AVA
Die einfache Lösung wäre, alles unter / usr / local / zu entfernen, aber auf diese Weise entfernen Sie alles, was Sie manuell kompiliert und installiert haben. Es gibt keine gute Möglichkeit zu verfolgen, welche Dateien zu welcher Software in / usr / local gehören. Aus diesem Grund wird generell davon abgeraten, dort etwas zu installieren. Vielleicht haben Sie dort nur Python. Wenn / usr / local / bin nur ausführbare Python-Dateien enthält, besteht eine gute Chance, dass durch das Entfernen nichts anderes beschädigt wird.
Emesik
2
Sie sollten Python niemals deinstallieren. Nimm das von mir. Ich habe es getan und es hat mein System kaputt gemacht. Viele Apps hängen davon ab. Dies ist sehr schlecht beraten.
Patrick Mutwiri