py2exe + sqlalchemy + sqlite问题

20

在我开始全速开发之前,我正在尝试使用Python实现一些基本功能。以下是具体细节:

Python 2.5.4
PyQt4 4.4.3
SqlAlchemy 0.5.2
py2exe 0.6.9
setuptools 0.6c9
pysqlite 2.5.1

setup.py:

from distutils.core import setup
import py2exe

setup(windows=[{"script" : "main.py"}], options={"py2exe" : {"includes" : ["sip", "PyQt4.QtSql","sqlite3"],"packages":["sqlite3",]}})

看起来py2exe成功生成了.exe文件,但是当我执行 dist/main.exe 时,主程序出现了以下错误信息:

Traceback (most recent call last):
  File "main.py", line 18, in <module>
  File "main.py", line 14, in main
  File "db\manager.pyc", line 12, in __init__
  File "sqlalchemy\engine\__init__.pyc", line 223, in create_engine
  File "sqlalchemy\engine\strategies.pyc", line 48, in create
  File "sqlalchemy\engine\url.pyc", line 91, in get_dialect
ImportError: No module named sqlite

我已经搜索了很多,但似乎找不到解决方案。如果我现在无法使其工作,我使用Python完成此项目的希望将破灭,并将重新开始使用Ruby...(并没有什么问题,只是我想把这个项目作为学习Python的好方法)

2个回答

31

你需要包含 sqlalchemy.databases.sqlite 包

setup(
  windows=[{"script" : "main.py"}],
  options={"py2exe" : {
    "includes": ["sip", "PyQt4.QtSql"],
    "packages": ["sqlalchemy.databases.sqlite"]
}})

1
如果我可以的话,我会给你+100分 :) 谢谢 - Jason Miesionczek
19
对于那些几年后来到这个问题的人:sqlalchemy不再有这个包名,取而代之的是sqlalchemy.dialects.sqlite。请注意更新您的代码以反映这一更改。 - Brandon Rhodes
1
除了@Brandon的提示之外,对于那些使用Firebird的人,我发现这个选项可行:"packages": ["sqlalchemy.dialects.firebird", "kinterbasdb"] - bluish
1
对于使用MySQL的用户,您需要在py2exe字典中设置"ascii": 0"packages": ["sqlalchemy.dialects.mysql","MySQLdb"]。适用于Python2.7和SQLAlchemy .7。 - Spencer Rathbun

5

你需要更改为 sqlalchemy.dialects.sqlite 包

setup( windows=[{"script" : "main.py"}], options={"py2exe" : { "includes": ["sip", "PyQt4.QtSql"], "packages": ["sqlalchemy.dialects.sqlite"] }})


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接