[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]