xsmile
You can fly higher
xsmile's Blog
iTip打包记

iTip的打包着实让我折腾了很久,今天终于被我曲折的打包成功了。

iTip采用py2exe进行打包,setup.py是最简单的那种。打包过程很顺利,但执行exe文件确报错,错误如下:

Traceback (most recent call last):
File “iTip.py”, line 6, in <module>
File “zipextimporter.pyo”, line 82, in load_module
File “iTipApp__init__.pyo”, line 1, in <module>
File “zipextimporter.pyo”, line 82, in load_module
File “iTipAppiTipFunction.pyo”, line 5, in <module>
File “zipextimporter.pyo”, line 82, in load_module
File “iTipDB__init__.pyo”, line 14, in <module>
File “sqlalchemyengine__init__.pyo”, line 173, in create_engine
File “sqlalchemyenginestrategies.pyo”, line 48, in create
File “sqlalchemyengineurl.pyo”, line 92, in get_dialect
ImportError: No module named sqlite

提示缺少sqlite模块。这确实是个很奇怪的问题,因为我在cmd下,执行python iTip.py命令能够很正常的运行程序,按道理,不该会出现这种找不到模块的现象。

我追踪File “sqlalchemyengineurl.pyo”, line 92, in get_dialect这个错误,发现这是个需要返回模块“sqlalchemy.databases.sqlite”的语句。我在打包目录library.zip文件里面找到sqlalchemydatabases目录,该目录下只有一个postgres.pyc文件,并没有sqlite。难怪会报错。但是奇怪我根本没有使用postgres数据库,py2exe怎么会将这个文件打包??

于是我尝试在library.zip中添加sqlite.pyc文件,但是又报错缺少pysqlite2模块,我又添加,又提示缺少_sqlite模块,疯了!很显然py2exe搜索错了数据库模块文件。

既然你只认postgres,不认sqlite,那我就来个改头换面,将我本机Python库下的sqlite.py文件改名为postgres.py,然后重新打包。这下有变化了,library.zip文件里面多了本来没有的sqlite3模块,有戏了!我往library.zip里sqlalchemydatabases目录下一看,仍然只有个postgres.pyc文件,但是这个postgres文件的真正面目却是sqlite。我把名字改回sqlite,重新运行exe文件,嘿嘿~~成功!!

这次纠错的过程很曲折,不知道py2exe为什么会误将postgres文件打包其中,是不是py2exe的bug?还有一个奇怪的地方是,我使用pyinstaller进行打包的时候,错误提示依然是缺少sqlite模块…难道Pyinstaller打包模块搜索方法和py2exe一样?

PS:后来我在源代码中显示声明导入sqlite模块:from sqlalchemy.databases import sqlite 再次打包,不报丢失sqlite模块的错误了,但是却报“LookupError: unknown encoding: ascii” 解决方法请移步这里

iTip1.0打包文件(exe)和源代码下载,请移步至这里

发表回复

textsms
account_circle
email

xsmile's Blog

iTip打包记
iTip的打包着实让我折腾了很久,今天终于被我曲折的打包成功了。 iTip采用py2exe进行打包,setup.py是最简单的那种。打包过程很顺利,但执行exe文件确报错,错误如下: Traceback (most…
扫描二维码继续阅读
2008-11-20