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.

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.


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

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.


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.


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.

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.