Erstellen von tragbaren Django-Apps - Hilfe benötigt

8

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:

  1. Nur die .pyc-Dateien verteilen und alle Anforderungen auf dem Zielcomputer erstellen und installieren.
  2. Verwenden eines der vielen Tools zum Paketieren von Python-Apps in ein verteilbares Paket.

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.

    
stricjux 07.12.2009, 09:04
quelle

2 Antworten

7

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

    
codeape 07.12.2009 10:07
quelle
0

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.

    
wisty 07.12.2009 09:36
quelle