Matroids Matheplanet Forum Index
Moderiert von matph
Informatik » Programmieren » Python: Module __main__
Autor
Universität/Hochschule Python: Module __main__
schnitzel
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 26.02.2009
Mitteilungen: 211
  Themenstart: 2019-01-18

Hi, weiß jemand, wie man in python die Importe in einem package machen muss, damit man eine Datei sowohl als Modul als auch als Skript verwenden kann? Also angenommen das Verzeichnis sieht so aus: myPackage |__init__.py | A.py | B.py # A.py def some_func(): print('some_func') return 5 # B.py # importiere some_func von A <--- print(some_func(), 0) if __name__ == '__main__': print(some_func(), 1) #-- Und nun möchte ich, dass man, sowohl das Package verwenden, als auch A.py alleine ausführen kann. Ich habs nur mit try-except Block oder mit sys.path hinbekommen... Gruß und vielen Dank


   Profil
matph
Senior Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 20.11.2006
Mitteilungen: 5506
Wohnort: A
  Beitrag No.1, eingetragen 2019-01-18

Hallo, Falls A direkt ausgeführt wird, so heißt das Modul __main__ Code der in A in \sourceon Python if __name__ == '__main__': # DO SOMETHING \sourceoff steht, wird daher nur ausgeführt wenn A direkt ausgeführt wird, nicht wenn A importiert wird, mehr ist nicht notwendig :-) -- mfg matph


   Profil
schnitzel
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 26.02.2009
Mitteilungen: 211
  Beitrag No.2, vom Themenstarter, eingetragen 2019-01-18

Hi, vielen Dank für deine Antwort. Das war mir leider schon bewusst, sorry falls ich nicht genau genug war. Das Problem ist, dass z.B. B.py nicht weiß wo es liegt. Oder konkreter: Falls ich die Stelle mit dem Pfeil mit \sourceon python from myPackage.A import some_func \sourceoff ersetze, ist es ein lauffähiges Modul. Allerdings führt python B.py , also innerhalb ausgeführt, zu einem ModuleNotFoundError. (myPackage existiert dann nicht und auch rel. Imorte nützen nichts.) Gruß


   Profil
matph
Senior Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 20.11.2006
Mitteilungen: 5506
Wohnort: A
  Beitrag No.3, eingetragen 2019-01-18

Hallo, Entweder eine Modul liegt an einer Stelle, welche bereits in sys.path steht, oder füge das Verzeichnis in dem sich dieses befindet hinzu, bevor es importiert werden soll :-) -- mfg matph


   Profil
__blackjack__
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 23.09.2021
Mitteilungen: 40
  Beitrag No.4, eingetragen 2021-09-26 23:51

Achtung: Nicht Module mit einem aktuellen Arbeitsverzeichnis innerhalb von Packages starten, und auch keine Pfade *in* Packages hinein zu `sys.path` hinzufügen. Um ein Modul in einem Package auszuführen muss das Package im `sys.path` liegen und man startet das dann mit ``python3 -m my_package.module_name``. Alles andere führt zu komischen Situationen in denen Module auf verschiedene Arten importiert werden können, was wiederum zu interessanten Problemen führen kann wenn ein Modul tatsächlich zweimal unter verschiedenen Namen importiert wird.


   Profil
schnitzel hat die Antworten auf ihre/seine Frage gesehen.

Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2021 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]