5

私は組み込み Web サーバー (tornado)、データベース (今のところ sqlite を使用した sqlalchemy)、および全体の shabang を備えた単純な Web アプリケーションを作成しました。実行可能な単一のexeを含む単一の自己完結型ディレクトリにすべてをバンドルしたいと思います。展開シナリオでは、このようにワンクリックでインストールして実行することが絶対に必要です。

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/
4

1 に答える 1

6

さて、私自身の質問に答えてすみません。しかし、多くのグーグルと試行錯誤の末、なんとかこれを機能させることができました。tornado + sqlalchemy + sqlite を py2exe で操作する際に同様の問題を抱えている人のために、私の 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,
    )
于 2012-05-22T09:23:16.537 に答える