2012-05-21 7 views
5

Webサーバー(トルネード)、データベース(sqlalchemyは現在sqliteを使用しています)、およびshabang全体を使って簡単なWebアプリケーションを作成しました。私はそれを実行することができる1つのexeファイルと一緒に1つの自己完結型ディレクトリにまとめたいと思います。展開シナリオでは、ワンクリックインストールが必要であり、このように実行されます。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は特定のディレクトリにあるファイルのみをコピーしていました。静的ディレクトリ下に新しいディレクトリを作成するには、data_files仕様に追加のエントリを指定する必要がありました。 – Karra

答えて

6

私自身の質問にお答えして申し訳ありません。しかし、多くのグーグル・グーグルと試行錯誤があって、私はこれを手に入れました。私は同様の問題が竜巻+ sqlalchemy + py2exeで動作するsqliteを取得している人のために私のsetup.py(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, 
    )