Stuart Ellis’ moderne Best Practices für Python
(stuartellis.name)Modern Good Practices for Python Development
Stuart Ellis’ moderne Best Practices für Python behandeln wichtige Punkte, die bei der Python-Entwicklung berücksichtigt werden sollten. Die wichtigsten Inhalte sind folgende:
Python verwenden
- Die im Betriebssystem integrierte Python-Version vermeiden: Die im Betriebssystem enthaltene Python-Version kann veraltet sein.
- Python mit Tools installieren, die mehrere Versionen unterstützen: Tools wie pyenv oder mise verwenden.
- Die aktuelle Python-Version verwenden: Für Sicherheits-Patches und Leistungsverbesserungen die neueste stabile Version nutzen.
pipxzum Ausführen von Entwickleranwendungen verwenden: Anwendungen über pipx in isolierten Umgebungen ausführen.- Projekt-Tools verwenden: PDM, Hatch, Mise, Rye werden empfohlen.
Python-Projekte entwickeln
- Code formatieren: Ruff verwenden.
- Code-Linting: Ruff wird empfohlen.
- Mit pytest testen: Zugehörige Plugins (pytest-randomly, pytest-cov) verwenden.
- Packaging: wheel-Pakete verwenden und bei Bedarf Container-Images oder PyInstaller einsetzen.
Sprachsyntax
- Type Hints verwenden: PEP 484, PEP 526.
- Strings mit f-Strings formatieren: PEP 498.
- Zeitzonenbewusste
datetime-Objekte verwenden: PEP 615.
Anwendungsdesign
- logging statt
print()verwenden. - TOML als Konfigurationsformat verwenden: PEP 680.
- Asynchrones I/O nur dann verwenden, wenn es wirklich nötig ist.
Bibliotheken
- Befehlszeileneingaben mit argparse verarbeiten.
- Datei- und Verzeichnispfade mit pathlib handhaben.
- Das schnelle und effiziente
os.scandir()stattos.listdir()verwenden: PEP 471. - Beim Ausführen externer Befehle
subprocessverwenden: PEP 324. - Für Web-Clients httpx statt requests verwenden.
Projekt-Best-Practices
- Die Datei
pyproject.tomlverwenden: PEP 517, PEP 518, PEP 621, PEP 660. - Das
src-Layout verwenden: Vergleich von src-Layout und flachem Layout. - Virtuelle Umgebungen für die Entwicklung verwenden: venv, PDM, Hatch, Mise werden empfohlen.
- Requirements-Dateien für die Paketinstallation verwenden:
pip-compileüber pip-tools oder uv verwenden.
Weitere Details finden sich im vollständigen Artikel.
.
.
Zusammenfassung der Hacker-News-Diskussion zu Python Modern Practices
In der Hacker-News-Diskussion zu Python Modern Practices wurden Nutzermeinungen zu verschiedenen Tools und Methoden geteilt:
- Empfehlung für UV: Die Nutzung von UV ist schnell und einfach, und bei Problemen gibt es guten Support. by screye
- Erwähnung von Rye: Rye unterstützt das Pinning und Herunterladen von Python-Interpretern, eine Integration mit uv ist geplant. by rat87
- Betonung der Einfachheit aktueller Tools: Mit Mamba-Umgebungen und einfachem pip gibt es keine Probleme, daher besteht kein Bedarf, die Tools zu wechseln. by helsinki
- Vorliebe für Basis-Tools: Mit pip, venv und virtualenvwrapper lassen sich die meisten Probleme lösen. by throwadobe
- Verteidigung von Pipenv: Pipenv wird als vollständige Lösung genutzt, und es ist unklar, warum es nicht weiter verbreitet ist. by routerl
- Probleme mit Poetry: Poetry enttäuschte durch Probleme wie die fehlende Möglichkeit, Versionskennungen aus Git-Commits hinzuzufügen. by alisonatwork
- Conda und Mamba: Conda ist bei der Abhängigkeitsverwaltung deutlich leistungsfähiger, und Mamba ist schneller. by wanderingmind
- Packaging-Probleme: Die Packaging-Probleme von Python haben stark soziale Ursachen und werden wohl immer bestehen bleiben. by jampekka
- Vorschlag als Alternative zu Pyenv: Mise ist schneller als Pyenv und unterstützt auch Node-Projekte. by odie5533
- Pydantic-Modelle und Data Classes: Pydantic-Modelle bieten starke Validierungsfunktionen, sind aber langsam, während Data Classes leichtgewichtig und effizient sind. by martinky24
Weitere Details finden sich in der Hacker-News-Diskussion.
5 Kommentare
Es gibt offenbar keinen Inhalt zur Verschlankung von Bibliotheken.
Die Nutzung einer virtuellen
envvon miniconda3, das Entfernen ungenutzter Bibliotheken und die portable Bereitstellung haben in verteilten Verarbeitungssystemen wie Yarn eine bessere Leistung gewährleistet.Warum sollte man
pip-toolsoderuvverwenden? Es gibt hier überhaupt keine Grundlage für die Behauptung, dass das modern oder besser sei.Es scheint einen Grund dafür zu geben, warum Hashes in
pip-Abhängigkeitsspezifizierern enthalten sein sollten: das Problem, dass sich mit dem aktuellen Verhalten vonpipdie Build-Version nicht angeben lässt. Ohne diesen Kontext wirken Leitfäden, die nur Anweisungen auflisten, nicht besonders überzeugend.Was verwenden Sie hauptsächlich??
Bisher habe ich nur mit
pip freezegearbeitet, dabei aber nur Bibliotheken ausgewählt, die sowohl Windows als auch Linux unterstützen, und Probleme durch geänderte Patch-Versionen gab es bislang nicht. Trotzdem verstehe ich jetzt, da mir das Problem bekannt ist, die Notwendigkeit, würde aber den Einsatz vonpip-toolsoderuverst in Betracht ziehen, wenn sie etwas ausgereifter sind.