Hallo, ich habe drei python scripts in einem Order: a.py b.py c.py ------ Script a importiert c (import c): kein Problem Script b importiert c (import c) : Programm bricht ab, in Logdatei steht diese Fehlermeldung: PythonHandler mod_python.cgihandler: ImportError: No module named c ----- Wie ist so etwas möglich??? thanks for your help, Helmut
Hallo Helmut, Am 06.09.14 10:31, schrieb helmut_blass@web.de:
Hallo, ich habe drei python scripts in einem Order: a.py b.py c.py ------ Script a importiert c (import c): kein Problem Script b importiert c (import c) : Programm bricht ab, in Logdatei steht diese Fehlermeldung: PythonHandler mod_python.cgihandler: ImportError: No module named c ----- Wie ist so etwas möglich???
Python findet Module normaler Weise im aktuellen Verzeichnis. Wenn jetzt aber c.py oder b.py oder von diesen importierte Module das aktuelle Arbeitsverzeichnis ändern, sucht Python an einer anderen Stelle und findet c.py nicht. Eine sinnvolle Lösung wäre alle drei Dateien, a.py, b.py und c.py, zusammen mit einer Datei __init__.py, die leer sein kann, in ein Verzeichnis z.B. meinprg zu stecken: meinprg __init__.py a.py b.py c.py Das übergeordnete Verzeichnis, in dem meinprg liegt, muss in den sys.path [1]. Das geht z.B. mit der Umgebungsvariable PYTHONPATH [2]. Dann sollte ein import meinprg.c as c oder from meinprg import c funktionieren. Es gibt da noch einige Details [3]. Viele Grüße Mike [1] https://docs.python.org/3/library/sys.html?highlight=sys.path#sys.path [2] https://docs.python.org/3/using/cmdline.html?highlight=pythonpath#envvar-PYT... [3] https://docs.python.org/3/reference/import.html#packages
Am 06.09.14 11:15, schrieb Mike Müller:
Hallo Helmut,
Am 06.09.14 10:31, schrieb helmut_blass@web.de:
Hallo, ich habe drei python scripts in einem Order: a.py b.py c.py ------ Script a importiert c (import c): kein Problem Script b importiert c (import c) : Programm bricht ab, in Logdatei steht diese Fehlermeldung: PythonHandler mod_python.cgihandler: ImportError: No module named c ----- Wie ist so etwas möglich???
Python findet Module normaler Weise im aktuellen Verzeichnis. Wenn jetzt aber c.py oder b.py oder von diesen importierte Module das aktuelle Arbeitsverzeichnis ändern, sucht Python an einer anderen Stelle und findet c.py nicht.
Korrektur nach Test: Das stimmt so nicht. In einem *laufenden* Programm funktioniert der zweite Import auch nach einem Verzeichniswechsel. Grund bei dir ist wahrscheinlich, das mod_python einen neuen Prozess in einem anderen Verzeichnis *startet*. Die Lösung sollte dann auch funktionieren. Mike
Eine sinnvolle Lösung wäre alle drei Dateien, a.py, b.py und c.py, zusammen mit einer Datei __init__.py, die leer sein kann, in ein Verzeichnis z.B. meinprg zu stecken:
meinprg __init__.py a.py b.py c.py
Das übergeordnete Verzeichnis, in dem meinprg liegt, muss in den sys.path [1]. Das geht z.B. mit der Umgebungsvariable PYTHONPATH [2]. Dann sollte ein
import meinprg.c as c
oder
from meinprg import c
funktionieren. Es gibt da noch einige Details [3].
Viele Grüße Mike
[1] https://docs.python.org/3/library/sys.html?highlight=sys.path#sys.path [2] https://docs.python.org/3/using/cmdline.html?highlight=pythonpath#envvar-PYT... [3] https://docs.python.org/3/reference/import.html#packages _______________________________________________ python-de maillist - python-de@python.org https://mail.python.org/mailman/listinfo/python-de
participants (2)
-
helmut_blass@web.de
-
Mike Müller