[Python-de] Re: Pfade, Modulnamen und import-Statements
[email protected] (Stefan Ram) 11 May 2024 12:13:39 GMT
| Newsgroups | gmane.comp.python.general.german |
|---|---|
| Organization | Stefan Ram |
| Message-ID | <[email protected]> |
Hermann Riemann <[email protected]> schrieb oder zitierte: >Ein wenig lässt sich mit sys.path.append erreichen. Es ist pythonisch, Module nicht weiter in "Pakete" (Unterverzeichnisse) zu untergliedern. Siehe den Vortrag "Beyond PEP 8" von Raymond Hettinger, bei zirka 45 %, wo er "from nettools import NetworkElement" einführt. Falls man ein Modul hat, das nur zu einem Projekt gehört, befindet es sich daher normalerweise im Verzeichnis eben jenes Projektes. Falls man unbedingt wie in main.py p/m0.py p/m1.py mit einem Unterverzeichnis p arbeiten will: Um in m1.py ein Modul m0 aus demselben Verzeichnis zu importieren, kann man einen /relativen/ oder /absoluten Import/ in m1.py verwenden: m1.py from .m0 import C # oder: from p.m0 import C verwenden, falls man p.m1 von main.py importiert. (Dann könnte es unter manchen Umgebungen vielleicht nötig sein, eine leere p/__init__.py anzulegen? Hier aber nicht.) (Ein direktes "import m0" in m1.py würde hingegen nur bei einer direkten Ausführung von m1.py als Skript gehen, nicht bei Import aus "main.py".) Wie Du schon schriebst, könnte man schließlich auch noch den Systempfad manipulieren. Etwa in m1.py: m1.py import sys import os parent_dir = \ os.path.dirname( os.path.dirname( os.path.abspath( __file__ ))) sys.path.append( parent_dir ) from p.m0 import C . Jetzt sieht m1.py die Situation aus der Sicht seines Oberverzeichnisses und kann daher nun m0.py als "p.m0" ansprechen, egal, ob es als Skript gestartet oder aus main.py importiert wird. Fall ein Modul in mehreren Projekten verwendet werden soll, und man es für sich selber verwenden will, empfiehlt sich die "editierbare" Installation mit "-e": cd Projectdir python -m pip install -e . . Nun sind alle Module aus Projectdir überall direkt mit "import" verfügbar. Falls ein Modul in mehreren Projekten verwendet werden soll, und man es für andere zugänglich machen will, dann empfiehlt sich die Herstellung einer Distribution mit "python setup.py". NB: In Python 3.12 wurden die "setuptools" entfernt und die Programmierer müssen sie daher jetzt selbst über "pip install setuptools" installieren. _______________________________________________ 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]