Ich baue eine Django-App, die ich bequem auf einem Ubuntu Linux-Host ausführen (testen :)). Ich möchte die App ohne Quellcode verpacken und auf eine andere Produktionsmaschine verteilen. Idealerweise könnte die App durch den Befehl ./runapp ausgeführt werden, der einen CherryPy-Server startet, der den Python / Django-Code ausführt.
Ich habe mehrere Wege gefunden, dies zu tun:
Ich bin wirklich scharf auf Nr.2 Option, ich würde gerne meine Django App enthalten, so ist es möglich, es zu verteilen, ohne zusätzliche Dinge zu installieren oder zu konfigurieren. Das Durchsuchen der Interwebs lieferte mir mehr Fragen als Antworten und einen sehr sauren Geschmack, dass das Django-Packen eine geheimnisvolle Kunst ist, die jeder kennt, von der aber niemand spricht. :)
Ich habe Freeze (fehlgeschlagen) versucht, Cx_freeze (einfache Installation Version schlägt fehl, Repository-Version funktioniert, aber die App-Ausgabe scheitert) und rot auf dbuilder.py (was funktionieren soll, funktioniert aber nicht wirklich - schätze ich). Wenn ich richtig verstehe, entstehen die meisten Probleme aus der Art, wie Django Module importiert (Beispiel), aber ich habe keine Ahnung, wie ich es lösen soll.
Ich bin mehr als glücklich, wenn jemand online irgendwelche Hinweise oder gute Ressourcen zum Packen / Verteilen von eigenständigen Django-Anwendungen bereitstellen kann.
Ich schlage vor, dass Sie Ihre Distribution auf setuptools aufbauen (ein Tool, das die Standard-Python-Distribution mechanism distutils ).
Mit setuptools sollten Sie in der Lage sein, ein Python-Ei zu erstellen, das Ihre Anwendung enthält. Die Metadaten des Eies können eine Liste von Abhängigkeiten enthalten, die von easy_install
automatisch installiert werden (Django + alle von Ihnen verwendeten Module / Pakete von Drittanbietern).
setuptools / distutils distros können Scripts enthalten, die in /usr/bin
installiert werden, so dass Sie Ihr runapp
script einbinden können.
Wenn Sie nicht mit virtualenv vertraut sind, schlage ich vor, dass Sie sich das auch ansehen. Es ist eine Möglichkeit, isolierte Python-Umgebungen zu erstellen. Dies wird sehr nützlich sein, um Ihre Distribution zu testen.
Hier ist ein Blogbeitrag mit einigen Informationen über virtualenv, sowie eine Diskussion über ein paar andere nützliche Tools: Werkzeuge des modernen Python-Hackers: Virtualenv, Fabric und Pip
Die Option --noreload verhindert, dass Django automatisch erkennt, welche Module sich geändert haben. Ich weiß nicht, ob das das beheben wird, aber vielleicht.
Eine andere Option (und zwar nicht ideal) besteht darin, einige Ihrer Kernfunktionen zu verschleiern, indem Sie sie als DLL-Datei packen, die Ihr einfacher Textcode aufrufen wird.
Tags und Links python django linux cherrypy software-distribution