Groups | Search | Server Info | Keyboard shortcuts | Login | Register
Groups > de.comp.lang.python > #6300
| From | ram@zedat.fu-berlin.de (Stefan Ram) |
|---|---|
| Newsgroups | de.comp.lang.python |
| Subject | Re: Paket Modul import Problem. |
| Date | 2025-06-18 17:30 +0000 |
| Organization | Stefan Ram |
| Message-ID | <Thema-20250618182220@ram.dialup.fu-berlin.de> (permalink) |
| References | <ld7taaFa0pcU1@mid.individual.net> |
Hermann Riemann <nospam.ng@hermann-riemann.de> schrieb oder zitierte:
>Gegeben 3 Dateien im Verzeichnis /irgendwas
>test.py mit Inhalt:
>print("test start")
>import grr
>print("test ende")
>grr/__init__.py mit Inhalt:
>print("start init grr")
>import bla
>print("ende init grr")
>und grr/bla/__init__.py mit Inhalt:
>print("in init bla")
> File "/irgendwas/grr/__init__.py", line 2, in <module>
> import bla
>Warum wird da bla nicht gefunden?
Ich hatte vielleicht schon einmal darauf geantwortet, aber finde
dieses Thema immer wieder interessant, so daß ich hier noch einmal
darauf antworten möchte, wobei ich mich vielleicht wiederhole.
Wir haben
x/test.py
x/grr/__init__.py
x/grr/bla/__init__.py
. Beim Aufruf
python test.py
aus dem Verzeichnis "x" heraus ist "x" im Systempfad. "grr"
wird von "x" aus gefunden. "bla" wird aber von "x" aus /nicht/
gefunden. Daher kommt die Fehlermeldung. Man muß daher in
"grr/__init__.py" so schreiben, als wäre man in "x", also
import grr.bla
. Man sollte alle Skripte, die direkt ausgeführt werden und
die "grr" nutzen sollen, nach "x" legen oder "grr" richtig
installieren oder "x" zum Systempfad hinzufügen.
Nun finde ich es umständlich, daß ich "grr/__init__.py" jetzt nicht
mehr direkt ausführen kann. Man könnte aber für diesen Zweck am
Anfang Code einfügen, der "x/grr" aus dem Suchpfad entfernt und dafür
"x" hinzufügt. Etwas wie (so nicht getestet, nur symbolischer Code):
if __name__=='__main__': # am Anfang der Datei, vor den anderen imports
import sys
from pathlib import Path
current_module_dir = Path(__file__).resolve().parent
oberverzeichnis = str(current_module_dir.parent)
sys.path =[ oberverzeichnis ]+\
[ path for path in sys.path if not path.endswith( r'grr' ) ]
Hier sollte durch die letzte Zeile das "...x/grr" aus
dem Suchpfad entfernt werden und durch die vorletzte das
Oberverzeichnis hinzugefügt werden (unter der Annahme, daß
es nur einen Suchpfad gibt, der mit "grr" endet, sonst müßte
man es noch anpassen). Dann kann man "x/grr/__init__.py" aus
"x/grr" heraus als Skript starten, aber die Importe verhalten
sich dann so, als habe man es aus "x" heraus aufgerufen.
Back to de.comp.lang.python | Previous | Next — Previous in thread | Find similar
Paket Modul import Problem. Hermann Riemann <nospam.ng@hermann-riemann.de> - 2024-06-16 12:32 +0200 Re: Paket Modul import Problem. ram@zedat.fu-berlin.de (Stefan Ram) - 2025-06-18 17:30 +0000
csiph-web