Re: [Python-de] Python 2.7: sys.path vs. PYTHONPATH

Hartmut Goebel <h.goebel@goebel-consult.de> writes:
Am 16.09.2011 10:26, schrieb Ole Streicher:
Unter 2.6 hatte das noch so funktioniert. Was hat sich da verändert? Sicher, dass das unter 2.6 funktioniert hat?
Ja. Unter 2.6 war die Verzeichnisstruktur unter /mylocal/python/lib64/python2.7/site-packages/ folgende: pyfits/ otherpkg/ usw. Jetzt ist sie distribute-0.6.19-py2.7.egg/distribute/ pyfits-3.0-py2.7-linux-x86_64.egg/pyfits/ otherpkg-0.3.3-py2.7.egg/otherpkg/ usw.
Die .pth-Files werden beim Starten von Python vom Modul `site` abgearbeitet. Also muss das Verzeichnis in PYTHONPATH sein, wenn Du dort .pth-Dateien verwenden möchtest.
OK, das erklärt einiges. Das heißt (ich kann es gerade nicht testen), es sollte reichen, so etwas zu schreiben? ----------------------8<------------------------------------------- import sys sys.path.append('/mylocal/python/lib64/python2.7/site-packages/') import site import pyfits ----------------------8<-------------------------------------------
M.E. ergibt die Installationsmethode, die Du verwendest, so keinen Sinn. Denn offensichtlich willst Du "site-packages" um Deinen Pfad erweitern.
Mir ist das nicht ganz verständlich: ich hatte doch beim Installieren "--prefix=/mylocal/python" angegeben; warum wird da jetzt zusätzlich ein Verzeichnis "pyfits-3.0-py2.7-linux-x86_64.egg/" eingefügt?
Dann mach es aber doch richtig und setzte PYTHONPATH.
Das Problem hier ist, dass es ein Anwenderprogramm gibt, welches mit #!/usr/bin/env python import sys sys.path.append('/mylocal/python/lib64/python2.7/site-packages/') import pyfits beginnt und unmittelbar aufgerufen wird. Ich habe daher keinen Zugriff auf das Environment des Nutzers. Ich dachte auch immer, dass genau dafür der sys.path vorgesehen ist und PYTHONPATH nur dazu dient, den nochmal von außen zu setzen?
Oder verwende virtualenv.
Ist zumindest nicht unter docs.python.org zu finden. Viele Grüße Ole

Am 18.09.2011 13:39, schrieb Ole Streicher:
Ja. Unter 2.6 war die Verzeichnisstruktur unter /mylocal/python/lib64/python2.7/site-packages/ folgende:
pyfits/ otherpkg/ usw.
Jetzt ist sie
distribute-0.6.19-py2.7.egg/distribute/ pyfits-3.0-py2.7-linux-x86_64.egg/pyfits/ otherpkg-0.3.3-py2.7.egg/otherpkg/ usw.
Dann hast Du bei 2.6 anders installiert. Kann es sein, dass Du unter 2.6 setuptools/ditstribute nicht installiert hattest, als Du das andere installiert hast? Wenn Du sagst, bei 2.6 ging es, bei 2.7 nicht, dann prüfe bitte, ob alle Deinen Parameter wirklich unverändert sind. Oder noch besser: Mache einen erneuten Test mit 2.6.
OK, das erklärt einiges. Das heißt (ich kann es gerade nicht testen), es sollte reichen, so etwas zu schreiben?
Nein, genügt nicht. Siehe `pydoc site`.
Mir ist das nicht ganz verständlich: ich hatte doch beim Installieren "--prefix=/mylocal/python" angegeben; warum wird da jetzt zusätzlich ein Verzeichnis "pyfits-3.0-py2.7-linux-x86_64.egg/" eingefügt?
Weil easy_install/setuptools/distribute eggs so installiert.
beginnt und unmittelbar aufgerufen wird. Ich habe daher keinen Zugriff auf das Environment des Nutzers.
Häh? Entweder, Du bis für die Installation zuständig, dann hast Du Zugriff auf das Environment des Anwenders. Oder Du hast keinen Zugriff auf das Environment des Anwenders, dann bist Du auch nicht dafür Verantwortlich, dem Anwender eine funktionsfähige Umgebung zu schaffen.
Ich dachte auch immer, dass genau dafür der sys.path vorgesehen ist und PYTHONPATH nur dazu dient, den nochmal von außen zu setzen?
Genau umgekehrt: PYTHONPATH ist der primäre Weg, den Modul-Suchpfad zu setzen. Denn der ist immer abhängig von der Betriebssystem-Umgebung (wo ist das Zeug installiert). Damit ist es Aufgabe des Betriebssystems, das der Anwendung mitzuteilen.
Oder verwende virtualenv. Ist zumindest nicht unter docs.python.org zu finden. http://lmgtfy.com/?q=python+virtualenv
-- Schönen Gruß - Regards Hartmut Goebel Dipl.-Informatiker (univ.), CISSP, CSSLP Goebel Consult Spezialist für IT-Sicherheit in komplexen Umgebungen http://www.goebel-consult.de Monatliche Kolumne: http://www.cissp-gefluester.de/ Goebel Consult ist Mitglied bei http://www.7-it.de
participants (2)
-
Hartmut Goebel
-
Ole Streicher