Verwenden verschiedener Versionen von Python

21

Hintergrund :

Da ich Python-Programme entwickle, die auf verschiedenen Python-Versionen ausgeführt werden müssen, habe ich verschiedene Python-Versionen auf meinem Computer installiert.

Ich verwende FC 13, daher war Python 2.6 in /usr/bin/python2.6und vorinstalliert /usr/lib/python2.6.

Ich habe Python 2.5 aus dem Quellcode installiert, und um die Dinge sauber zu halten, habe ich die --prefix=/usrOption verwendet, mit der Python in /usr/bin/python2.5und installiert wurde /usr/lib/python2.5.

Wenn ich jetzt pythonmeine Eingabeaufforderungsshows ausführe , verwende ich Version 2.5. Ich habe jedoch einige Probleme mit der Installation.

Paketverwaltung :

Mit easy_install werden Pakete immer in installiert /usr/lib/python2.6/site-packages/. Ich habe setuptools.egg für Python 2.5 heruntergeladen und versucht, es zu installieren, aber es gibt mir einen Fehler:

/usr/lib/python2.5/site-packages does NOT support .pth files

Es scheint, dass Python2.5 nicht in meinem PYTHONPATH enthalten ist. Ich dachte, die Standardinstallation würde sich zum PYTHONPATH hinzufügen, aber wenn ich echo $PYTHONPATHbeim Promt schreibe, erhalte ich nur eine leere Zeile.

Alex
quelle

Antworten:

20

Die empfohlene Art, mehrere Python-Versionen zu installieren, besteht darin, jede von der Quelle aus zu installieren - sie können problemlos zusammen installiert werden. Anschließend können Sie virtualenv mit dem entsprechenden Interpreter verwenden, um die erforderlichen Abhängigkeiten zu installieren (mithilfe von pip oder easy_install). Der Trick, um die Installation mehrerer Interpreter aus dem Quellcode zu vereinfachen, ist:

sudo make altinstall

anstelle der üblichen "sudo make install". Dadurch wird die Versionsnummer zur ausführbaren Datei hinzugefügt (Sie hätten also Python-2.5, Python-2.6, Python-3.2 usw.), wodurch Konflikte mit der Systemversion von Python vermieden werden.

VPeric
quelle
2
Altinstall + virtualenv = python development nirvahna. Vielen Dank!
Alex
13

Dies klingt nach einer perfekten Anwendung für virtualenv , einem sehr beliebten Tool zum Erstellen isolierter Python-Umgebungen. Dies ist ein Beispielbefehl zum Angeben der Version von Python

$ virtualenv --python=/usr/bin/python2.6 myvirtualenv
Adam Byrtek
quelle
Ich denke nicht, dass virtualenvdie Lösung in diesem Fall ist. Siehe meine Antwort.
Piotr Dobrogost
5

Unter Verwendung von easy_installwerden Pakete immer in installiert /usr/lib/python2.6/site-packages/

Das liegt daran, dass distutils allen Skripten, die installiert werden, eine Shebang-Zeile hinzufügt. Wenn Sie das easy_installSkript direkt ausführen, wird es mit dem Interpreter ausgeführt, mit dem es installiert wurde (entsprechend der shebang-Zeile). Was easy_installgerade läuft, hängt von deinem PATHnicht ab PYTHONPATH. Wenn Sie ein Paket in einer Python 2.5-Instanz installieren möchten, müssen Sie den zu verwendenden easy_installPython-Interpreter angeben:

/usr/bin/python2.5/python easy_install ...

Streng genommen virtualenvhilft das hier nicht weiter, da es im Kontext von Basis- Python erstellt werden muss, was genau dasselbe Problem wie beim Ausführen darstellt easy_install. Dafür ist das --pythonArgument da virtualenv. Aus irgendeinem Grund easy_installliefert es kein analoges Argument, so dass es mit einem bestimmten Python-Interpreter wie oben gezeigt ausgeführt werden muss.

Piotr Dobrogost
quelle
Es ist meine erste Antwort hier und ich hoffe, das erste Nekromantenabzeichen auch :)
Piotr Dobrogost
Sehr gute Erklärung, danke! Nekromantenabzeichen verdient;)
Alex
2

Ich benutze auch Fedora 13 und PYTHONPATHist nicht eingestellt.

In Python erhalten sys.pathSie eine Liste der Pfade, die zum Importieren von Skripten verwendet werden.

Ich bin nicht vertraut damit, wie das easy_installZielverzeichnis festgelegt wird, aber ich bin mir sicher, dass es ein Befehlszeilenargument geben könnte.

Geben Sie an, unter welcher Python-Version easy_installSie arbeiten möchten, indem Sie Ihrem Befehl den vollständigen Pfad zum gewünschten Python voranstellen.

Überprüfen Sie auch, ob easy_installein Symlink in bin zu einem Skript in einer von Ihnen installierten Python-Version vorhanden ist.

bkersten
quelle
1

Virtualenv ist hier definitiv ein Glücksfall.

In meinem Setup wurde die Umgebungsvariable VIRTUALENV_USE_DISTRIBUTEauf 1 gesetzt, sodass das modernere Distribute-Paket anstelle von setuptools verwendet wird. Ich habe virtuelle Umgebungen für die beiden Python-Versionen auf meinem System wie folgt erstellt:

$ virtualenv -p python2.6 py2
$ virtualenv -p python3.2 py3

Ich habe dann drei Aliase erstellt in .bashrc:

alias py2='source $HOME/py2/bin/activate'
alias py3='source $HOME/py3/bin/activate'
alias idle='python -m idlelib.idle'

Somit kann ich verwenden py2, um zu einem Standard von Python 2.6 und py3zu einem Standard von Python 3.2 zu wechseln. Die Eingabe idlewird ausgeführt, welche Version von IDLE für die virtuelle Umgebung geeignet ist, in der ich mich befinde.

Die Installation von Paketen in einer dieser virtuellen Umgebungen erfordert normalerweise nur einen pip installBefehl.

Pythoneer
quelle