2012-05-21 10 views
5

Ho scritto una semplice applicazione Web con server Web incorporato (tornado), database (sqlalchemy che utilizza sqlite per ora) e l'intero shabang. Vorrei raggruppare tutto in una singola directory autosufficiente con un singolo exe che può essere eseguito. Lo scenario di distribuzione richiede assolutamente un'installazione con un clic ed è eseguito in questo modo.pyinstaller con uno structor di directory non banale

Ho assolutamente fallito nel tentativo di ottenere py2exe o pyinstaller per raggruppare il mio codice. Il problema ha a che fare direttamente con la struttura e il layout della directory, che è la seguente. Non voglio modificare molto il layout della directory. Qualcuno può suggerire come posso ottenere questo con py2exe o pyinstaller o qualsiasi altro strumento adatto?

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

Potete fornire il codice si è tentato? – jadkik94

+0

Qual era il problema quando hai provato? Sono mancati alcuni file? –

+0

Janne, ho avuto problemi tra cui le mie directory statiche: il glob stava solo copiando i file in una determinata directory. Per creare nuove directory sotto static/ho dovuto specificare voci aggiuntive nella mia specifica data_files. – Karra

risposta

6

Bene, mi dispiace rispondere alla mia stessa domanda. Ma molto googlando e prove ed errori, sono riuscito a farlo funzionare. Sto incollando il mio setup.py (per py2exe) sotto per chi ha problemi simili ottenendo tornado + sqlalchemy + sqlite lavorando con py2exe. Quando eseguo python setup.py python, le ultime righe indicano che alcuni moduli sono mancanti. Ma questo non ha avuto alcun impatto sull'esecuzione del programma.

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

Ecco il mio 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, 
    )