Python: Wählen Sie eine von mehreren installierten Modulversionen aus
Auf meinem System sind mehrere Module mehrfach installiert. Um ein Beispiel zu geben,numpy 1.6.1
ist im Standardpfad unter installiert/usr/lib/python2.7/dist-packages
und ich habe eine aktualisierte Version vonnumpy 1.8.0
installiert bei/local/python/lib/python2.7/site-packages/
.
Der Grund, warum ich die alte Version nicht einfach entfernen kann, ist, dass ich keine Berechtigung habe, irgendetwas auf meinem Arbeitscomputer zu ändern. Ich muss jedoch die neue numpy-Version verwenden.
Ich habe hinzugefügt/local/python/lib/python2.7/site-packages/
zu meinemPYTHONPATH
. Das hilft leider nicht, da/usr/lib/python2.7/dist-packages
wird zuerst in den Pfad eingefügt und dahernumpy 1.6.1
wird geladen. Hier ist ein Beispiel:
>>> import os
>>> print os.environ['PYTHONPATH']
/local/python/lib/python2.7/site-packages
>>> import pprint
>>> import sys
>>> pprint.pprint(sys.path)
['',
'/local/python/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg',
'/local/python/lib/python2.7/site-packages/pyparsing-2.0.1-py2.7.egg',
'~/.local/lib/python2.7/site-packages/setuptools-3.4.4-py2.7.egg',
'~/.local/lib/python2.7/site-packages/mpldatacursor-0.5_dev-py2.7.egg',
'/usr/lib/python2.7/dist-packages',
'/local/python/lib/python2.7/site-packages',
'/usr/lib/python2.7',
...,
'~/.local/lib/python2.7/dist-packages',
...]
So scheint es, dass die Importreihenfolge ist
Aktuelles VerzeichnisEier ausPYTHONPATH
Eier vom lokalen Modulpfad (~/.local/lib/python2.7/site-packages/*.egg
)systemweiter Modulpfad (~/usr/lib/python2.7/dist-packages/
)Verzeichnisse vonPYTHONPATH
Zwischenpfade (der Kürze halber weggelassen)Userbase-Verzeichnis (~/.local/lib/python2.7/site-packages/
)Mein Problem ist, dass ich Punkt 5. vor Punkt 3. und 4. setzen müsste, damit mein Code richtig funktioniert. Im Moment, wenn ich ein Modul importiere, gegen das kompiliert wurdenumpy 1.8.0
von dem/local/*
Verzeichnis, und dieses Modul importiert Numpy, es wird immer noch Numpy aus dem/usr/*
Verzeichnis und scheitern.
Ich habe dieses Problem umgangen, indem ich Folgendes in meine Skripte eingefügt habe:
import sys
sys.path.insert(0, '/local/python/lib/python2.7/site-packages/')
Dadurch kann ich Python zwingen, die richtige Importreihenfolge zu verwenden, aber dies ist natürlich keine Lösung, da ich dies in ausführen müsstejedes einzelne Skript.