2012-05-21 2 views
5

Я написал простое веб-приложение со встроенным веб-сервером (торнадо), базу данных (sqlalchemy с использованием sqlite на данный момент) и весь shabang. Я хотел бы объединить все это в один автономный каталог с одним exe, который можно запустить. Сценарий развертывания абсолютно требует установки одного клика и запускается следующим образом.pyinstaller с нетривиальной структурой каталогов

У меня нет абсолютно попытки получить py2exe или pyinstaller, чтобы связать мой код. Проблема напрямую связана с структурой каталогов и компоновкой, которая заключается в следующем. Я не хочу сильно менять макет каталога. Может кто-нибудь предложить, как я могу получить это с помощью py2exe или pyinstaller или любого другого подходящего инструмента?

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

Можете ли вы предоставить код, который вы пробовали? – jadkik94

+0

В чем была проблема, когда вы пытались? Были ли некоторые файлы пропавшими без вести? –

+0

Janne, у меня были проблемы с моими статическими каталогами - glob только копировал файлы в данный каталог. Чтобы создать новые каталоги под static/мне пришлось указать дополнительные записи в моей спецификации data_files. – Karra

ответ

6

Ну, извините, ответьте на мой вопрос. Но много ошибок в Google, проб и ошибок, мне удалось заставить это работать. Я вставляю свой setup.py (для py2exe) ниже для тех, у кого есть похожие проблемы, получающие торнадо + sqlalchemy + sqlite, работающие с py2exe. Когда я запускаю python setup.py py2exe, в последних строках упоминается, что некоторые модули отсутствуют. Но это не повлияло на выполнение программы.

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

Вот мой 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, 
    ) 
Смежные вопросы