Best Practice zum Bündeln von Drittanbieterbibliotheken für die Verteilung in Python 3

8

Ich entwickle eine Anwendung mit Python 3. Was ist die beste Vorgehensweise, um Bibliotheken von Drittanbietern für den Entwicklungsprozess und die Endbenutzerverteilung zu verwenden? Beachten Sie, dass ich innerhalb dieser Einschränkungen arbeite:

  • Entwickler im Team sollten genau die gleiche Version der Bibliotheken haben.
  • Eine ideale Lösung würde sowohl unter Windows als auch unter Linux funktionieren.
  • Ich möchte vermeiden, dass der Benutzer Software installiert, bevor er unsere eigene verwendet; Das heißt, sie sollten Produkt A und Produkt B nicht installieren müssen, bevor Sie unser Produkt verwenden.
Dewfy 21.04.2011, 15:24
quelle

4 Antworten

1

Es gibt keine Best Practices, aber es gibt ein paar verschiedene Tracks, denen die Leute folgen. In Bezug auf die kommerzielle Produktverteilung gibt es Folgendes:

Verwalten Sie Ihren eigenen Paketserver

In Bezug auf Ihren Entwicklungsprozess ist es typisch, dass Sie Ihre Dev-Boxen entweder von einem lokalen Paketserver aktualisieren lassen. Dadurch können Sie die Abhängigkeitsliste "einfrieren" (d. H. Einfach Upstream-Updates nicht mehr erhalten), so dass sich alle auf derselben Version befinden. Du kannst zu bestimmten Zeiten updaten und die Entwickler ebenfalls updaten lassen, so dass alle im Gleichschritt bleiben.

Bei Kundeninstallationen schreiben Sie normalerweise ein Installationsskript. Sie können alle Pakete sammeln und Ihre libs sowie die anderen gleichzeitig installieren. Es kann Probleme mit dem Versuch geben, ein neues Python oder sogar eine Standardbibliothek zu installieren, da der Kunde möglicherweise bereits auf eine andere Version angewiesen ist. Normalerweise können Sie in einer Sandbox installieren, um Ihre Pakete von den Systempaketen zu trennen. Dies ist eher ein Problem unter Linux als Windows.

Toolchain

Die andere Option besteht darin, für jedes unterstützte Betriebssystem eine Toolchain zu erstellen. Eine Toolchain besteht aus allen Abhängigkeiten (bis zu, aber nicht inklusive Basis-OS-Bibliotheken wie glibc ). Diese Toolchain wird für die Entwickler UND Kunden zusammengelegt und verteilt. Best Practice für eine Toolchain ist:

  • Ändern Sie die ausführbare Datei, um Verwechslungen zu vermeiden. (dh. python - & gt; pkg_python)
  • installieren Sie nicht in .../bin -Verzeichnissen, um eine versehentliche Verwendung zu verhindern. (dh auf Linux können Sie unter .../libexec installieren. /opt wird auch verwendet, obwohl ich es persönlich verabscheue.)
  • installiere deine libs am richtigen Ort unter lib/python/site-packages , damit du PYTHONPATH nicht benutzen musst.
  • Verteilen Sie die Quelldateien .py für die ausführbaren Dateien, damit das Installationsscript sie entsprechend verschieben kann.
  • Das Paketformat sollte ein systemeigenes Paket sein (RedHat - & gt; RPM, Debian - & gt; DEB, Win - & gt; MSI)
dietbuddha 21.04.2011, 16:59
quelle
3

Sie könnten setuptools verwenden, um Ei- Dateien für Ihre Bibliotheken zu erstellen, vorausgesetzt, sie sind nicht bereits in Ei- Form verfügbar. Sie könnten dann die Eier zusammen mit Ihrer Software bündeln, die sie entweder installieren oder sicherstellen müssten, dass sie sich auf dem Importpfad befinden.

Das hat einige Schwierigkeiten, d. h. wenn Ihre Bibliotheken C-Erweiterungen haben, dann werden Ihre Eizellen plattformspezifisch, aber nach meiner Erfahrung ist dies das am weitesten verbreitete Mittel, Dinge in Python zu bündeln.

Ich muss sagen, dass dies eine der Schwächen von Python bleibt. Das Ökosystem von Drittanbietern richtet sich sicherlich eher an Entwickler als an Endnutzer.

    
DNS 21.04.2011 16:32
quelle
1
vartec 21.04.2011 15:30
quelle
0

Angenommen, die Bibliotheken von Drittanbietern sind in pypi verfügbar, verwenden Sie distutils und geben Sie in setup.py die erforderlichen Versionen an.

    
geoffspear 21.04.2011 15:29
quelle