[Python-de] Re: Pfade, Modulnamen und import-Statements
"Peter J. Holzer" <[email protected]> Sun, 5 May 2024 12:38:18 +0200
| Newsgroups | gmane.comp.python.general.german |
|---|---|
| Organization | LUGA |
| Message-ID | <[email protected]> |
On 2024-05-05 08:25, Marc Haber <[email protected]> wrote: > On Sun, May 05, 2024 at 02:26:02AM +0200, Peter J. Holzer wrote: >> On 2024-05-04 11:12, Marc Haber <[email protected]> wrote: >> > ich hab mal eine Verständnisfrage. >> > >> > Gegeben sei ein Verzeichnis . und ein Programm ./keks. >> > Weiterhin sei die Klasse MyClass1 in d/mc1.py und die Klasse MyClass2 in >> > d/mc2.py definierrt. >> > >> > Wenn ich nun in keks die Klasse MyClass2 benutzen möchte, schreibe ich >> > "from d.mc2 import MyClass2". Wnn ich in d/mc1.py dasselbe tun möchte, >> > muss ich dort "from mc2 import MyClass2" schreiben, >> >> Nein, das funktioniert nicht: >> >> #v+ >> % ./keks >> Traceback (most recent call last): >> File "/home/hjp/tmp/marc/./keks", line 3, in <module> >> from d.mc1 import MyClass1 >> File "/home/hjp/tmp/marc/d/mc1.py", line 1, in <module> >> from mc2 import MyClass2 >> ModuleNotFoundError: No module named 'mc2' >> #v- > > Mein mc1.py hat eingebauten testcode: > > #v+ > if __name__ == "__main__": > zdns = Zg2DNSQuery(timeout=2, debug=True) > > rootservers = DNSRootDataParser() > logger.debug(f"{rootservers.get_ipv4_servers()=}") > #v- Ah, dachte ich mir, dass da eine wichtige Information fehlt ;-). > verhält sich der vielleicht anders als wenn man nur das Modul > importiert? Das wäre dann ja noch viel schlimmer ;-) Wenn Du ein Script aufrufst, wird das Directory des Scripts in sys.path eingefügt. Dadurch wird dann bei einem "import m" u.a. auch nach "full_path_to_script_dir/m.py" gesucht und damit funktioniert der Import. Zum Testen von komplexeren Packages ist das aber wenig hilfreich, weil im echten Einsatz natürlich nicht irgendwelche Subdirectorys der Package-Hierarchie im Suchpfad stehen und man, wenn man ein Modul aus einem Package direkt aufruft, die Package-Hierarchie verliert und damit relative Imports nicht funktionieren: #v+ % python3 d/mc1.py __main__ ['/home/hjp/tmp/marc/d', '/usr/lib/python310.zip', '/usr/lib/python3.10', '/usr/lib/python3.10/lib-dynload', '/home/hjp/.local/lib/python3.10/site-packages', '/usr/local/lib/python3.10/dist-packages', '/usr/lib/python3/dist-packages'] Traceback (most recent call last): File "/home/hjp/tmp/marc/d/mc1.py", line 4, in <module> from .mc2 import MyClass2 ImportError: attempted relative import with no known parent package #v- Unter anderem auch aus diesem Grund schreibe ich Test-Code immer in eigene Files. hp _______________________________________________ python-de Mailingliste -- [email protected] Zur Abmeldung von dieser Mailingliste senden Sie eine Nachricht an [email protected] https://mail.python.org/mailman3/lists/python-de.python.org/ Mitgliedsadresse: [email protected]