2017-02-12 4 views
2

Ich schreibe gerade ein Python-Programm und ich möchte es an einige en-Benutzer (und Entwickler) verteilen. Ich möchte die Anzahl der notwendigen Schritte reduzieren, um das Programm auf ein Minimum zu reduzieren.Python - packen eine Quelldistribution

Mein Anwendungsfall ist relativ einfach. Ich möchte den Prozess/Werkzeug/was auch immer zu:

A) Laden Sie die Liste der Pakete herunter, die für die Anwendung benötigt werden, um zu funktionieren.

B) Führen Sie nacheinander eine Liste von Python-Skripten aus (z. B. Datenbank erstellen und dann Migrationen ausführen).

Ich verstehe, dass Distlib einiges davon schon tut. Jedoch finde ich die Dokumentation irgendwie verwirrend, es scheint eine API zu geben, um Skripte zu installieren, aber keine, um sie automatisch auszuführen.

Idealerweise würde ich eine Liste von Skripten und eine Liste von Abhängigkeiten angeben und das Programm automatisch installieren lassen.

+1

Sie möchten vielleicht lesen: http://stackoverflow.com/questions/17806485/execute-a-python-script-post-install-using-distutils-setuptools, https://github.com/lupien/pyHegel /blob/master/setup.py – fedepad

Antwort

1

Vielleicht wäre der beste Weg, dies zu lösen, make mit einem Makefile (https://www.gnu.org/software/make/) zu verwenden.

Distlib, über die Datei setup.py, würde Ihnen helfen, es lesbarer zu machen, indem Sie einigen Python-Skripten Namen geben. Und Sie könnten das make Ziel/Abhängigkeiten-System verwenden, um Aufgaben sequenziell auszuführen.

Wenn Sie bei Python bleiben möchten, könnten Sie auch Luigi (https://luigi.readthedocs.io/en/stable/) verwenden, aber es scheint hier zu übertrieben.

0

Ok, ich beendete das Schreiben meiner eigenen Sache, basierend darauf, wie ich die Schnittstelle aussehen wollte. Der Code, der die Anwendung installiert sieht wie folgt aus:

from installtools import setup 

scripts = ['create_database.py', 'run_migrations.py'] 

setup("Shelob", "requirements.txt", scripts) 

Das vollständige Skript finden Sie hier: https://gist.github.com/fdemian/808c2b95b4521cd87268235e133c563f

Da PIP nicht über eine öffentliche API (and isn't likely to have one in the near future) das Skript verwendet die subprocess API aufrufen :

pip -r [requirements_file_path]

Danach installieren, ruft sie Skripte die angegebenen python, eins nach dem anderen. Obwohl es wahrscheinlich nicht sehr robust ist, scheint es die Lösung zu sein.

Verwandte Themen