PYTHONPATH ignoriert
Umgebung: debian 4.0
Python 2.4
Mein 'Projekt' ist installiert in:
/usr/lib/python2.4/site-packages/Projekt.
Aber ich möchte, um meine arbeiten zu kopieren, statt die einzeln installiert, die befindet sich in:
/home/me/dev/project/src
Also, was ich Tue:
export PYTHONPATH=/home/me/dev/project/src
ipython
import foo # das ist in src
foo.__file__
*/usr/lib/python2.4/site-packages/project/foo.py*
statt :
/home/me/dev/project/src/project/foo.py
Wie kommt das? Probiere ich die Wege (der export oben) und was ich sehe, ist:
import sys,os
sys.Pfad
[",
'/usr/bin',
'/usr/lib/python2.4/site-packages',
'/home/me/dev/project/src',
'/usr/lib/python24.zip',
'/usr/lib/python2.4',
'/usr/lib/python2.4/plat-linux2',
'/usr/lib/python2.4/lib-tk',
'/usr/lib/python2.4/lib-dynload',
'/usr/local/lib/python2.4/site-packages',
'/usr/lib/python2.4/site-packages/PIL',
'/var/lib/python-support/python2.4',
'/usr/lib/python2.4/site-packages/IPython/Erweiterungen',
'/home/me/.ipython']os.environ['PYTHONPATH']
/home/me/dev/project/src
Lassen Sie uns einige konkrete Fragen stattdessen: Jeder stimmt zu, dass wenn ich den PYTHONPATH, um eine gültige Modul-Pfad, es sollte laden Sie dieses Modul zunächst unabhängig? Alle sind sich einig, dass python versucht Module zu laden in der Reihenfolge der von sys.Pfad? Wenn die aboce korrekt ist, warum python nicht einfügen PYTHONPATH am Anfang des sys.Pfad (nach den Eiern)?
InformationsquelleAutor | 2009-06-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gemäß der python-Dokumentation, dies ist das erwartete Verhalten: https://docs.python.org/2.4/lib/module-sys.html:
Unter python 2.6 ist es anders: http://docs.python.org/tutorial/modules.html#the-module-search-path
aktualisiert die Antwort.
Ich verstehe es nicht. Ich den PYTHONPATH, um etwas zu korrigieren, und es lädt zuerst, was in der site-packages. Bizarre!
Ändern Sie die Priorität, nicht ein Skript ausführen, die sich in site-packages. Verschieben Sie das Skript irgendwo anders und das Skript-Verzeichnis (site-packages) wird nicht mehr Durcheinander Ihr bestimmt Suche.
Scripts-Verzeichnis? Ich bin importieren ein Modul, das beide in site-packages/project/foo.py und /home/me/dev/project/src/project/foo.py. Für den Willen, dies zu lösen, nehmen wir an, ich möchte in der Lage sein, es mit ipython.
InformationsquelleAutor van
Habe das problem gefunden (und ich es verpasst habe am Anfang, als jemand wies mich auf Wo ist Python-sys.Pfad initialisiert?).
Scheint es, dass easy_install schafft eine pth-Datei /usr/lib/python2.4/site-packages/easy-install.pth, die wird dann geladen site.py. Dieser fügt die site-packages-Pfad in der sys den Pfad, bevor die PYTHONPATH. Nicht schön.
InformationsquelleAutor
Ich glaube nicht, dass Sie keine Kontrolle darüber haben, wo der PYTHONPATH wird eingefügt in die aktuelle Pfad-Liste. Aber das ist nicht der einzige Weg, den Pfad ändern - Sie können die update-sys.Pfad selbst, bevor Sie versuchen, das Projekt importieren.
Edit: In Ihrem spezifischen Fall haben, können Sie den Pfad ändern, mit
Ich weiß, dass. Aber ich will nicht zu berühren, auf den code.
dieser arbeitete für mich mit ipython notebook, in der Erwägung, dass die Einstellung PYTHONPATH an der Kommando-shell nicht. Danke.
InformationsquelleAutor Mark Ransom
Sehe ich '/usr/lib/python2.4/site-packages', die in Ihrem Pfad vor "/home/me/dev/project/src', spielt das eine Rolle? Was passiert, wenn Sie schalten Sie die beiden?
Aus der docs:
So vielleicht haben Sie nicht finden, Ihre Arbeitskopie auf Ihrem PYTHONPATH als Sie gedacht hatte?
Ja, was zählt. PYTHON, AFAIK, soll fügen Sie die PYTHONPATH ersten (oder einfach nur nach '.') Meine PYTHONPATH richtig ist.
Aber wenn Sie haben einen Fehler gemacht, wie das weglassen der init.py-Datei in /home/me/dev/project/src, dann python wird gehen, um zu finden, die prod-Paket in site-packages
__init__.py
ist es ( in/home/me/dev/project/src
)Haben Sie versucht, vertauschen die beiden Elemente, die in Ihrem sys.Weg, den ich vorgeschlagen?
InformationsquelleAutor John Pirie
Nicht die direkte Antwort auf deine Frage, aber Sie können auch ein virtualenv erstellen Sie eine Entwicklungsumgebung. In diesem virtualenv können Sie dann installieren Sie Ihr Produkt in /home/me/dev/project/src als Entwicklungs-Paket: "python setup.py entwickeln".
Diese Weise müssen Sie nicht ändern, um Ihre PYTHONPATH manuell. Aktivieren Sie einfach die virtualenv wenn Sie möchten, verwenden Sie das Entwicklungs-code.
InformationsquelleAutor Mark van Lent
Ich denke, Sie PYTHONPATH einrichten /home/me/build/project/src-da /home/me/dev/project/src erscheinen nicht in den sys.Weg, aber /home/me/build/project/src funktioniert.
InformationsquelleAutor David Cournapeau
Es klingt wie die
src
Verzeichnis nicht__init__.py
- Datei. Es ist kein richtiges Paket.sorry. Was ich sagte ist "init.py` gibt es ( in
/home/me/dev/project/src
)"InformationsquelleAutor S.Lott