2012-05-21 10 views
5

Ich habe eine einfache Web-Anwendung mit eingebetteten Webserver (Tornado), Datenbank (sqlalchemy mit sqlite für jetzt) ​​und dem ganzen Shabang geschrieben. Ich möchte alles in einem einzigen eigenständigen Verzeichnis mit einer einzigen exe zusammenführen, die ausgeführt werden kann. Das Bereitstellungsszenario erfordert unbedingt eine Installation mit einem Klick und wird wie folgt ausgeführt.pyinstaller mit einem nicht-trivialen Verzeichnis structor

Ich habe absolut versagt, py2exe oder pyinstaller zu bekommen, um meinen Code zu bündeln. Das Problem hat direkt mit der Verzeichnisstruktur und dem Layout zu tun, die wie folgt aussehen. Ich möchte das Verzeichnislayout nicht zu sehr ändern. Kann jemand vorschlagen, wie ich das entweder mit py2exe oder pyinstaller oder einem anderen geeigneten Werkzeug bekommen kann?

project/ 
|-> main.py 

|-> libs/ 
    |-> tornado/ (The full git rep as a submodule) 
     |-> tornado/ (The actual package) 
    |-> sqlalchemy/ 

|-> src/ 
    |-> support-1.py 
    |-> support-2.py 

|-> static/ 
    -> js/ 
    -> img/ 
    -> css/ 

|-> templates/ 
+1

Können Sie den Code zur Verfügung stellen Sie versucht? – jadkik94

+0

Was war das Problem, als Sie es versuchten? Waren einige Dateien nicht vorhanden? –

+0

Janne, ich hatte Probleme mit meinen statischen Verzeichnissen - der Glob hat nur Dateien in einem bestimmten Verzeichnis kopiert. Um neue Verzeichnisse unter static/zu erstellen, musste ich zusätzliche Einträge in meiner data_files spec angeben. – Karra

Antwort

6

Nun, tut mir leid, meine eigene Frage zu beantworten. Aber viel Googeln und Versuch und Irrtum, ich schaffte es, das zum Laufen zu bringen. Ich füge meine setup.py (für py2exe) unten für jeden ein, der ähnliche Probleme hat, Tornado + sqlalchemy + sqlite mit py2exe arbeiten zu lassen. Wenn ich Python setup.py py2exe ausführen, erwähnen die letzten Zeilen, dass einige Module fehlen. Dies hatte jedoch keinen Einfluss auf die Ausführung des Programms.

> "['Carbon', 'Carbon.Files', '_curses', '_scproxy', 'django.utils', 
> 'dummy.Process', 'pkg_resources', 'pysqlite2', 'simplejson', 
> 'sqlalchemy.cprocessors', 'sqlalchemy.cresultproxy', 'tornado.epoll']" 

Hier ist meine setup.py:

import glob, os, sys 

curr_dir = os.path.abspath('.') 
pare_dir = os.path.abspath('..') 

sys.path = [os.path.join(pare_dir, 'py2exe-0.6.9', 'py2exe'), 
      os.path.join(curr_dir, 'src'), 
      os.path.join(curr_dir, 'libs', 'tornado'), 
      os.path.join(curr_dir, 'libs', 'sqlalchemy'), 
      os.path.join(curr_dir, 'libs')] + sys.path 


from distutils.core import setup 
import py2exe 

data_files = [('', ['config.json']), 
       ('db', ['db/prs.db']), 
       ('templates',  glob.glob('templates/*.*')), 
       ('static',   glob.glob('static/*.* ')), 
       ('static/css',  glob.glob('static/css/*.*')), 
       ('static/js',  glob.glob('static/js/*.*')), 
       ('static/js/libs', glob.glob('static/js/libs/*.*')), 
       ('static/img',  glob.glob('static/img/*.*')), 
       ] 

setup(console=['prs.py'], options={ 
    'py2exe' : { 
     'includes' : ['demjson'], 
     'packages' : ['sqlalchemy.dialects.sqlite'], 
     }}, 
    data_files=data_files, 
    )