py2app setup.py 使用问题

5 投票
2 回答
2719 浏览
提问于 2025-04-17 01:04

好的,我正在尝试使用py2app为我的项目生成一个发布版本。不过我还是不太明白怎么操作。所以我的setup.py文件看起来是这样的:

"""
This is a setup.py script generated by py2applet

Usage:
    python setup.py py2app
"""

from setuptools import setup
import setuptools

PACKAGES = ['sqlalchemy.dialects.sqlite']
MODULES = ['sqlite3']

APP = ['tvb/interfaces/web/run.py']
OPTIONS = {'argv_emulation': True,
           'packages': PACKAGES ,
           'includes' : MODULES }
DATA_FILES = []

setup(
    app=APP,
    data_files=DATA_FILES,
    packages = setuptools.find_packages(), 
    include_package_data=True,
    options={'py2app': OPTIONS},
    setup_requires=['py2app', "pyopengl", "cherrypy", "sqlalchemy", "simplejson", 
                          "formencode", "genshi", "quantities","numpy", "scipy",
                          "numexpr", "nibabel", "cfflib", "mdp", "apscheduler",
                          "scikits.learn"]
)

我第一个想问的是:在这里我应该在MODULES里包含什么内容呢?py2app会自动扫描setup_requires里的内容并把它们包含进去吗?还是说我需要在MODULES里手动添加一些条目?

另一个问题是,当我尝试运行我的应用时,出现了一个错误:sqlalchemy.exc.ArgumentError: Could not determine dialect for 'sqlite'。经过大量搜索,我只发现对于py2exe,你需要把sqlalchemy.dialects.sqlite作为一个包包含进去,但这对我似乎不起作用。我是不是漏掉了什么?

最后一个问题是,在运行python setup.py py2app之前,我收到了一个错误:malformed object (load command 3 cmdsize not a multiple of 8)。这正常吗?

祝好,
博格丹

2 个回答

0
from setuptools import setup
APP = ['your_prog.py']
DATA_FILES = ['your.db']
OPTIONS = {
'includes' : ['sqlalchemy.dialects.sqlite',"os", "platform"]
}
setup(
app=APP,
data_files=DATA_FILES,
options={'py2app': OPTIONS},
setup_requires=['py2app']
)

这是一个示例的setup.py文件,用于包含sqlite数据库文件的.py程序。这是一个适合初学者的setup.py示例。如果你的.db文件和your_prog.py在同一个文件夹里,你可以使用这个配置。Mac系统的应用程序会正常运行。如果不指定.db文件,应用程序仍然可以运行,但无法连接到数据库文件。

3

看来我之前完全搞错了。

'includes' : ['sqlalchemy.dialects.sqlite']

我应该用的是其他东西,而这似乎解决了问题。

撰写回答