Verteilen eines Python-Pakets zusammen mit Modulabhängigkeiten mithilfe von RPM

Ich habe mehrere Python-Anwendungen, die aus Skripten / Modulen bestehen, die als RPMs gepackt und bereitgestellt werden sollten.

Das schwierigere ist, dass jede Anwendung zusammen mit allen Abhängigkeiten von Python-Modulen verteilt werden sollte. Diese sollten gegenüber systemweit installierten bevorzugt verwendet werden.

Die Zielhosts für einige dieser RPMs verfügen nur über eingeschränkten Netzwerkzugriff, daher sollten die RPMs alles enthalten, was zum Ausführen der App erforderlich ist, anstatt alles zum Zeitpunkt der Bereitstellung herunterzuladen.

Ich habe mir das Verpacken und Verteilen angeschautvirtualenvDas Verschieben eines virtuellen Computers scheint jedoch nicht gut unterstützt zu werden.

Ich habe angeschautzc.buildout, fand aber die Dokumentation fehlend. Ich konnte sehen, wie man Abhängigkeiten während der Entwicklung herunterlädt, aber nicht wie man sie als Teil einer größeren Anwendung verteilt. Es ist möglich, dass unterschiedliche Apps unterschiedliche Versionen desselben Moduls erfordern, daher sollten diese nicht systemweit installiert werden.

Ein weiterer Nachteil ist, dass alle Python-Skripte in der App so geändert werden müssen, dass sie während der Entwicklung und nach der Bereitstellung einen anderen sys.path verwenden.

Gibt es Vorschläge, wie dies am besten erreicht werden kann? Eine ideale Zusammenfassung des Workflows aus Entwicklersicht sieht folgendermaßen aus:

Anwendungsquelle herunterladenFühren Sie ein Skript aus, um bestimmte Modulabhängigkeiten abzurufen, wenn diese nicht vorhanden sind (möglicherweise mithilfe vonPip)Führen Sie ein Skript aus, um eine Python-App zu erstellen, und packen Sie es und alle heruntergeladenen Abhängigkeiten in RPM

Das endgültige RPM sollte dann auf einem Host ohne Netzwerkzugriff und nur mit einem installierten Python-Interpreter installiert und ausgeführt werden können.