Module und Paketverwaltung
Grundlagen von Python-Modulen und -Paketen
Modul vs. Paket
graph TD
A[Python Module] --> B[Single .py File]
C[Python Package] --> D[Directory with __init__.py]
D --> E[Multiple Modules]
Pakethierarchie
Ebene |
Beschreibung |
Beispiel |
Modul |
Einzelne Python-Datei |
utils.py |
Paket |
Verzeichnis mit Modulen |
myproject/ |
Subpaket |
Verschachteltes Paket |
myproject/core/ |
Erstellen einer umfassenden Paketstruktur
## Create package directory
mkdir -p myproject/
cd myproject
## Create package structure
mkdir -p mypackage/core
mkdir -p mypackage/utils
touch mypackage/__init__.py
touch mypackage/core/__init__.py
touch mypackage/utils/__init__.py
Fortgeschrittene init.py-Techniken
Relative Imports
## mypackage/__init__.py
from .core import main_functionality
from .utils import helper_tools
## Explicit import control
__all__ = ['main_functionality', 'helper_tools']
Dynamisches Laden von Modulen
## Dynamic module discovery
import os
import importlib
def load_modules(package_path):
modules = {}
for filename in os.listdir(package_path):
if filename.endswith('.py') and not filename.startswith('__'):
module_name = filename[:-3]
modules[module_name] = importlib.import_module(f'.{module_name}', package=__name__)
return modules
Abhängigkeitsverwaltung
Verwaltung der Anforderungen
## Create requirements file
touch requirements.txt
## Add package dependencies
echo "numpy>=1.20.0" >> requirements.txt
echo "pandas==1.3.3" >> requirements.txt
## Install dependencies
pip install -r requirements.txt
Paketverteilung
Setup-Konfiguration
## setup.py
from setuptools import setup, find_packages
setup(
name='mypackage',
version='0.1.0',
packages=find_packages(),
install_requires=[
'numpy>=1.20.0',
'pandas==1.3.3'
]
)
Namespace-Pakete
## Support for distributed packages
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
Best Practices
Praxis |
Beschreibung |
Konsistente Benennung |
Verwenden Sie Kleinbuchstaben und Unterstriche |
Minimale init.py |
Halten Sie die Initialisierung gering |
Klar definierte Imports |
Verwenden Sie explizite Imports |
Versionsverfolgung |
Bewahren Sie Versionsinformationen auf |
LabEx-Einblicke
LabEx bietet praktische Programmierumgebungen, um Paketstrukturen zu üben und Entwicklern zu helfen, die Techniken der Modul- und Paketverwaltung zu meistern.
Fehlerbehandlung bei Imports
## Robust import strategy
try:
from .optional_module import OptionalClass
except ImportError:
OptionalClass = None
Optimierung
- Lazy Loading
- Minimieren Sie die top-level-Imports
- Implementieren Sie bedingte Imports
- Nutzen Sie
__all__
für kontrollierte Exporte