2015-01-30 8 views
6

Ich habe ein paar Skripts, die ihre eigene Kopie einiger Funktionen hatte, also extrahierte ich diese Funktionen zu einem Modul und ließ die Skripte die Funktion importieren. Diese Skripte sollen auf eine Reihe von Linux-Servern kopiert und ausgeführt werden. Wenn die Skripte standalone arbeiteten, würde ich einfach die Dateien auf die Server kopieren und "python" ausführen.Bündel Python-Skript und Abhängigkeiten in einer einzigen Datei

Ich habe einen zentralen Management-Server, der die Skripte auf den verschiedenen Servern kopieren und ausführen wird.

Ich habe ein wenig über Python Eier gelesen, könnte aber einige Tipps für die Methode verwenden. Die Art, wie ich es heute mache, ist das Kopieren und Ausführen des Python-Skripts. Da dies gut funktioniert, habe ich mir gedacht, dass es vielleicht eine Möglichkeit gibt, die Skripte selbst mit dem (internen) Modul zu kombinieren, von dem sie abhängig sind, das Paket auf die Server zu kopieren und sie auszuführen. Ich verstehe nicht, warum ich irgendetwas mit "pip" installieren müsste.

Nun, welche Art von Setup würden Sie empfehlen? Soll ich vielleicht Eier auf meinem lokalen Computer bauen und den Verwaltungsserver die Eifeile auf die Server kopieren lassen? Ich würde es vorziehen, alles, was der Server benötigt, vom Management-Server zu kopieren, anstatt die Server selbst Abhängigkeiten herunterzuziehen, so dass ich nicht mehr alle Firewalls lochen muss. Da Eier normalerweise Abhängigkeiten abbauen müssen, sind Eier vielleicht nicht der richtige Weg?

Die meisten meiner Server laufen Python 2.6, aber ich habe einige laufende Python 2.4 und 3.2.

Grüße, Kenneth

Antwort

3

-Update 2016: wagon hilft Gebäude Rad-Pakete mit Abhängigkeiten für die Offline-Installation.


Für einfache Projekte, die alle Quellen in einem Ordner zusammenhalten und als Ganzes kopieren, ist gut genug. Sie können git verwenden, um Ihren Code an ein zentrales Repository zu senden und ihn auf Ihren Server zu ziehen, ohne Pakete zu erstellen. Fabric und Ansible sind zwei Tools, mit denen Sie den Bereitstellungsprozess automatisieren können. (Führen Sie beispielsweise remote git pull aus, und löschen Sie alle Ihre pyc-Dateien).

Wenn Sie Abhängigkeiten zwischen Projekten geteilt haben, pip und wheels sind die modernen Alternativen zu den Eiern:

Sie können ein einfaches Bündel erstellen, die alle Abhängigkeiten enthält Sie wollen mit installieren.

$ tempdir=$(mktemp -d /tmp/wheelhouse-XXXXX) 
$ pip wheel -r requirements.txt --wheel-dir=$tempdir 
$ cwd=`pwd` 
$ (cd "$tempdir"; tar -cjvf "$cwd/bundled.tar.bz2" *) 

Sobald Sie ein Bündel haben, können Sie dann deinstallieren mit:

$ tempdir=$(mktemp -d /tmp/wheelhouse-XXXXX) 
$ (cd $tempdir; tar -xvf /path/to/bundled.tar.bz2) 
$ pip install --force-reinstall --ignore-installed --upgrade --no-index --use-wheel --no-deps $tempdir/* 

(Von pip docs)

+0

Ausgezeichnet, danke für den Rat. Ich werde weiterhin alle Quellen in einer einzigen Zip-Datei aufbewahren, bis ich die Notwendigkeit sehe, die Abhängigkeiten zwischen Projekten zu teilen. – kenneho

6

Sie möchten vielleicht Blick auf Twitters PEX Bibliothek prüfen, welche erstellen ausführbare Dateien aus Python-Paketen: https://pex.readthedocs.org/en/latest/whatispex.html

.pex-Dateien sind nur sorgfältig konstruierte Zip-Dateien mit einem #!/ usr/bin/env python und special __main.py__

Verwandte Themen