wie sucht Python die Module?
![](https://secure.gravatar.com/avatar/af6e0fcba82290e7c1da722fb0f0fae2.jpg?s=120&d=mm&r=g)
Trotz 5 Büchern, die ich mir gekauft habe, finde ich keine Antwort auf die Frage, wie und in welcher Reihenfolge Python seine Module, Dateien etc. zusammensucht. Magic-Lines fand ich nur unter Linux im Buch Python 2.x, Das Einsteigerseminar von Martin Uzak. Da steht aber auch ausdrücklich, "das funktioniert nur unter Unix". Wie kann man zwei Versionen des Interpreters auf dem System haben, da ja sicherlich nicht alle Komponenten immer auch sofort für ein neues Release zur Verfügung steht. Um nicht alle Projekte wieder überarbeiten zu müssen, bietet es sich an, auch frühere Stände zu speichern. Wie kann das bewerkstelligt werden? MfG Werner Warweg _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
![](https://secure.gravatar.com/avatar/e2835572a191d5a492cded3c0c6d17b3.jpg?s=120&d=mm&r=g)
Hallo Werner, Frohe Ostern! :) On Sun, 2004-04-11 12:17:00 +0200, Werner Warweg wrote:
Trotz 5 Büchern, die ich mir gekauft habe, finde ich keine Antwort auf die Frage, wie und in welcher Reihenfolge Python seine Module, Dateien etc. zusammensucht.
"Module" ist mir relativ klar, aber was meinst du zum Beispiel mit "Dateien etc."?
Magic-Lines fand ich nur unter Linux im Buch Python 2.x, Das
Was heißt "Magic-Lines"? Meinst du "#! /pfad/zum/interpreter" in der ersten Zeile?
Einsteigerseminar von Martin Uzak. Da steht aber auch ausdrücklich, "das funktioniert nur unter Unix".
Wie kann man zwei Versionen des Interpreters auf dem System haben, da ja sicherlich nicht alle Komponenten immer auch sofort für ein neues Release zur Verfügung steht.
Die reinen Python-Module laufen normalerweise auch auf jeder neueren Version. Viele kompilierte Erweiterungen werden auch schon während der Beta-Phase einer neuen Python-Version getestet und in kompilierter Form angeboten. Davon abgesehen, kannst du mehrere Python-Versionen auf dem Rechner haben, sofern du sie in unterschiedlichen Verzeichnissen bzw. Verzeichnis-Bäumen installierst. Jedenfalls ist das kein Problem, wenn man Python selbst kompiliert und dabei auch den zukünftigen Pfad angibt. In einem laufenden Python-Prozess werden zum Finden der Module die Verzeichnisse in sys.path abgesucht. Standardmäßig sind darin die Pfade enthalten, die die Standard-Bibliothek enthalten, die zum laufenden Binary gehört. Zum Beispiel: Python 2.3.3 (#2, Mar 27 2004, 23:18:46) [GCC 3.3.3 [FreeBSD] 20031106] on freebsd5 Type "help", "copyright", "credits" or "license" for more information.
import sys sys.path ['', '/usr/local/lib/python23.zip', '/usr/local/lib/python2.3', '/usr/local/lib/python2.3/plat-freebsd5', '/usr/local/lib/python2.3/lib-tk', '/usr/local/lib/python2.3/lib-dynload', '/usr/local/lib/python2.3/site-packages', '/usr/local/lib/python2.3/site-packages/Numeric', '/usr/local/lib/python2.3/site-packages/PIL', '/usr/local/lib/python2.3/site-packages/piddle']
Der String '' am Anfang bezeichnet das aktuelle Verzeichnis. Frage an die anderen: Wie finden die Verzeichnisse zu den nachträglichen Erweiterungen (PIL etc.) ihren Weg in sys.path? Werden einfach alle Verzeichnisse in site-packages mit aufgenommen? Du kannst sys.path in-place verändern, um die Suchreihenfolge für _danach_ importierte Module zu verändern. Falls du ein Python-Binary hast, aber andere Pfade durchsuchen willst, kannst du zusätzliche Suchpfade über die Umgebungsvariable PYTHONPATH angeben. Schau mal in die Online-Doku auf http://www.python.org .
Um nicht alle Projekte wieder überarbeiten zu müssen, bietet es sich an, auch frühere Stände zu speichern.
Was meinst du mit "frühere Stände"? Viele Grüße Stefan _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
![](https://secure.gravatar.com/avatar/679c22be1bb05b81710fab3124686f63.jpg?s=120&d=mm&r=g)
Stefan Schwarzer schrieb:
Frohe Ostern! :) Dir auch!
"Module" ist mir relativ klar, aber was meinst du zum Beispiel mit "Dateien etc."? Ich leider noch unter Windows ;-) Daher werden sicherlich noch DLLs gebraucht, wahrscheinlich auch includes etc. benötigt
Was heißt "Magic-Lines"? Meinst du "#! /pfad/zum/interpreter" in der ersten Zeile? ja! in dem erwähnten Buch "Einsteigerseminar von Martin Uzak" nennt der Autor die so.
Davon abgesehen, kannst du mehrere Python-Versionen auf dem Rechner haben, sofern du sie in unterschiedlichen Verzeichnissen bzw. Verzeichnis-Bäumen installierst. Jedenfalls ist das kein Problem, wenn man Python selbst kompiliert und dabei auch den zukünftigen Pfad angibt.
compilieren kann ich leider nicht!
In einem laufenden Python-Prozess werden zum Finden der Module die Verzeichnisse in sys.path abgesucht. Standardmäßig sind darin die Pfade enthalten, die die Standard-Bibliothek enthalten, die zum laufenden Binary gehört.
unter Windows habe ich den Pfad in der Systemumgebung. Ist das wohl identisch? Muß ich alle .py-Dateien, die verwendet werden, in das Verzeichnis des aufrufenden Programms kopieren? Dann erhalte ich ja einen ziemlichen "Overhead".
['', '/usr/local/lib/python23.zip', '/usr/local/lib/python2.3', '/usr/local/lib/python2.3/plat-freebsd5', '/usr/local/lib/python2.3/lib-tk', '/usr/local/lib/python2.3/lib-dynload', '/usr/local/lib/python2.3/site-packages', '/usr/local/lib/python2.3/site-packages/Numeric', '/usr/local/lib/python2.3/site-packages/PIL', '/usr/local/lib/python2.3/site-packages/piddle']
Das funktioniert wohl nur unter Linux so.
Um nicht alle Projekte wieder überarbeiten zu müssen, bietet es sich an, auch frühere Stände zu speichern.
Was meinst du mit "frühere Stände"?
Python 2.2 und Python 2.3! Aber vielleicht hat sich die Frage schon durch Deine Antwort erledigt, da Du sagst, dass Python immer komplett aktuell gehalten wird. Mich machte nur der Hinweis bei wxPython misstrauisch, dass neue Namenskonventionen eingearbeitet wären. Mit freundlichem Gruß Werner Warweg _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
![](https://secure.gravatar.com/avatar/096157f2284f5b7b79a9a0987aeeff0c.jpg?s=120&d=mm&r=g)
Hi! Ich habe mal paar alte Beiträge rausgekruscht...
Ich leider noch unter Windows ;-) Daher werden sicherlich noch DLLs gebraucht, wahrscheinlich auch includes etc. benötigt Die sind alle in den 'package' verzichnissen.
Was heißt "Magic-Lines"? Meinst du "#! /pfad/zum/interpreter" in der ersten Zeile? ja! in dem erwähnten Buch "Einsteigerseminar von Martin Uzak" nennt der Autor die so. Die heißen normalerweise shebang, haben aber nur unter Unices sinn, da dort alle dateien ausführbar gemacht werden können. (für python ist er übringens am besten #!/usr/bin/env python[2/2.3 usw])
compilieren kann ich leider nicht! Mit MinGW (www.mingw.org) sollte das gehen. Aber um ehrlich zu sein, habe ich das auch nie unter Windows versucht, unter linux reicht ein simples ./configure und make.
unter Windows habe ich den Pfad in der Systemumgebung. Ist das wohl identisch? Muß ich alle .py-Dateien, die verwendet werden, in das Verzeichnis des aufrufenden Programms kopieren? Dann erhalte ich ja einen ziemlichen "Overhead". Na das finde ich witzig. Nein, ganz so schlimm ist es nicht. Es gibt einmal den PATH, der definiert wo in deinem OS programme gesucht werden. Mach jetzt am besten 'cmd' auf: echo %PATH% Das ist der Systempath. Daneben gibt es den Pythonpath. Wenn python.exe in deinem PATH ist (höhst empfehlenswert, meiner hat 7 Zeilen und cmd arbeitet fast wie bash) kannst jetzt in cmd python starten: python
import sys sys.path Hier steht dann wo Python module und packages sucht. Und jetzt zu deiner PIL frage: wenn ein ordner eine datei __init__.py enthält (egal ob leer oder nicht) und in sys.path liegt (der ordner) dann wird er zum package und du kannst ihn dann über import PIL aufrufen.
Python 2.2 und Python 2.3! Aber vielleicht hat sich die Frage schon durch Deine Antwort erledigt, da Du sagst, dass Python immer komplett aktuell gehalten wird. Mich machte nur der Hinweis bei wxPython misstrauisch, dass neue Namenskonventionen eingearbeitet wären. Das ist wxPython-sache (und die neuen Namenskonventionen sind sehr gut, da sie dein global namespace nicht aufblasen).
grüße, Marek _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
participants (4)
-
Marek Kubica
-
Stefan Schwarzer
-
Werner Warweg
-
Werner.Warweg@t-online.de