【问题标题】:pyinstaller with a non-trivial directory structor具有非平凡目录结构的 pyinstaller
【发布时间】:2012-05-28 05:06:37
【问题描述】:

我已经编写了一个简单的 Web 应用程序,其中包含嵌入式 Web 服务器(tornado)、数据库(目前使用 sqlite 的 sqlalchemy)和整个 shabang。我想将它们全部捆绑到一个独立的目录中,并带有一个可以运行的 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/

【问题讨论】:

  • 你能提供你试过的代码吗?
  • 您尝试时遇到了什么问题?是否缺少某些文件?
  • Janne,我在包含我的静态目录时遇到了麻烦 - glob 只是在给定目录中复制文件。要在 static/ 下创建新目录,我必须在 data_files 规范中指定其他条目。

标签: python windows py2exe pyinstaller


【解决方案1】:

好吧,很抱歉回答我自己的问题。但是经过多次谷歌搜索和反复试验,我设法让它工作。我将我的 setup.py(用于 py2exe)粘贴在下面,以供任何在使用 py2exe 时遇到类似问题的人使用 tornado + sqlalchemy + sqlite。当我运行 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,
    )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    相关资源
    最近更新 更多