2014-02-12 9 views
10

Ich habe eine Build-Box, die Python 2.4, 2.6 und 2.7 unterstützt. Dies führt zur Installation verschiedener Versionen von Pips, wie sie in ihren eigenen Python-Installationen benötigt werden. Ich verwende tox, um Tests über setup.py auszuführen.tox verwendet falsche Version von Pip, wenn mehrere Versionen von Python installiert sind

Immer, wenn ich eine {python2.7_installation_dir}/bin/python setup.py test ausführen, führt dies zu einem .tox Verzeichnis. Innerhalb .tox Verzeichnis betreibe ich

py27/bin/pip --version 
pip 1.4.1 from {my_package}/.tox/py27/lib/python2.7/site-packages (python 2.7) 


[[email protected] .tox]# python2.7 
Python 2.7.6 (default, Nov 20 2013, 15:33:09) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-54)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import pip 
>>> pip.__version__ 
'1.5.2' 

So die Version von Pip innerhalb .tox Verzeichnis ist 1.4.1, wo als Pip für Python-Interpreter installiert, die ich 1.5.2 die setup.py test ist auszuführen bin mit. Dies führt zu Fehlern bei der Ausführung von Tests, da pip verwendet wird, um die Verzeichnisse zu installieren, und einige von ihnen stammen aus externen Quellen. In 1.5.2 müssen wir explizit --allow-external --allow-unified Flag für eines der Module setzen, die existiert in 1.4.1 nicht, was jedes Mal zu einem Fehler führt, wenn ich Tests durch tox aufrufe.

Es gibt nur eine Python2.7-Installation, die von der Quelle installiert wird. Aber ich denke, es lief pip 1.4.1, aber jetzt wurde aktualisiert, um 1.5.2 zu verwenden. Wie kann tox die alte Version verwenden? Gibt es eine Datei .pth oder etwas, das zurückgelassen werden könnte, das aufgeräumt werden muss?

Ich könnte tox fallen lassen und Pyetests direkt ausführen, aber ich würde es vorziehen, sie über tox laufen zu lassen.
Bitte lassen Sie mich wissen, wenn Sie die Protokolle sehen möchten, kann ich die Frage mit dem Protokoll aktualisieren.

+0

Haben Sie eine Lösung gefunden? Ich habe das gleiche Problem. – Vetalll

+0

Nein, ich habe wegen des Mangels an Zeit, mich damit zu befassen, feige gegangen! – opensourcegeek

Antwort

-1

Mit diesem Ansatz: eine tox.ini Datei auf dem gleichen Niveau wie Ihr setup.py erstellen und verwenden es tox zu sagen, welche Versionen, wie here

+1

Dies beantwortet die Frage nicht. Es wird nicht die Python-Version gesucht, sondern die Pip-Version. – Sardathrion

1

tox schafft eine virtualenv in .tox/py27, .tox/py35 etc laufen je auf den Python-Versionen, mit denen Sie testen (dh basierend auf Ihnen envlist in tox.ini oder das Argument zur -e Option). tox dann installiert pip in diesem virtualenv, und Ihre Pakete und alle Pakete, die Ihr Paket abhängig ist.

Bei weiteren Läufen wird der virtualenv wiederverwendet und nur Ihr Paket wird neu installiert (und mögliche Abhängigkeiten aktualisiert), um Zeit zu sparen. Ihre pip wird an der ursprünglichen Version bleiben, es sei denn Sie tun:

./tox/py27/bin/pip install -U pip 

oder reinitialisiert die komplette virtualenv mit:

tox -r -e py27 

(oder tox -r für alle .tox virtualenvs für alle Python-Versionen in Ihrem envlist).

Wenn Sie weiter analysieren möchten, wie tox das Setup, erste Anruf:

tox -r -e py27 -vv 

vom Ausgang können Sie sehen, die Schritt neu erstellen:

py27 recreate: /src/site-packages/your/package/.tox/py27 
    removing /src/site-packages/your/package/.tox/py27 
setting PATH=/src/site-packages/your/package/.tox/py27/bin:/opt/python/2.7/bin:........ 
    /src/site-packages/your/package/.tox$ python -m virtualenv --python /opt/python/2.7.13rc1/bin/python py27 >/src/site-packages/your/package/.tox/py27/log/py27-0.log 

Nun gehen Sie auf die .tox Verzeichnis und wiederholen Sie die virtualenv Erstellung ausführliche:

cd .tox; rm -rf py27 
python -m virtualenv --python /opt/python/2.7/13rc1/bin/python py27 

Von diesem einloggen Sie sehen, dass es die neueste (gecached) Version von pip verwendet. Da Sie bei Ihrer normalen Installation die neueste Version pip erhalten, sollte der Cache pip nicht bereinigt/aktualisiert werden.

Verwandte Themen