使用py2exe、sqlalchemy和mssql制作exe文件
我在用py2exe制作exe文件时遇到了问题。在我的项目中,我使用了sqlalchemy和mssql模块。
from distutils.core import setup
import py2exe
setup(
windows=[{"script" : "pyrmsutil.py"}],
options={"pyrmsutil" : {
"includes": ["sqlalchemy.dialects.mssql", "sqlalchemy"],
"packages": ["sqlalchemy.databases.mssql", "sqlalchemy.cresultproxy"]
}})
但是当我运行这个命令:
python.exe setup.py py2exe
时,我收到了一个构建日志,里面有以下错误信息:
有一些模块似乎缺失了:['_scproxy', 'pkg_resources', 'sqlalchemy.cprocessors', 'sqlalchemy.cresultproxy']
然后在"dist"文件夹里,我看到了我的pyrmsutil.exe文件,但当我运行它时,什么也没有发生。也就是说,这个可执行文件启动了,但什么都不做,马上就结束了,而且没有生成任何pyrmsutil.exe.log文件。这实在是太奇怪了。
有没有人能帮我解决这个错误?
2 个回答
1
我知道这不算是个直接的答案,但你试过 pyInstaller 吗?我以前用过 py2exe,发现要把东西打包成可以分发的版本挺麻烦的。pyInstaller 需要稍微多一点设置,不过它的文档写得很好,最终的效果似乎也更好。
要解决这个问题,你可以试着搜索一下提到的 dll 文件,然后把它们放到 exe 文件所在的文件夹里,或者放到你构建它的地方。
0
看起来 py2exe 找不到 sqlalchemy 的 C 扩展。
为什么不直接把 egg 文件包含在发布包里,把 sqlalchemy 加入 py2exe 的排除列表,然后在启动时加载这个 egg 文件呢?
我在启动脚本中使用了这个:
import sys
import path
import pkg_resources
APP_HOME = path.path(sys.executable).parent
SUPPORT = APP_HOME / 'support'
eggs = [egg for egg in SUPPORT.files('*.egg')]
reqs, errs = pkg_resources.working_set.find_plugins(
pkg_resources.Environment(eggs)
)
map(pkg_resources.working_set.add, reqs)
sys.path.extend(SUPPORT.files('*.egg'))
我使用了 Jason Orendorff 的路径模块(http://pypi.python.org/pypi/path.py),不过如果你想的话,可以很容易地把它去掉。