上次用python的adodb模块写了个访问access数据库的程序,发布时想打包成单独的一个exe文件,完成这个任务的工具是PyInstaller,我试过用它打包一些小python程序,一次就成功了,但adodb就不行了,似乎没办法将adodb模块打包进去.通过查看手册,总算明白是怎么回事了,PyInstaller无法获知通过非常手段导入的模块,
调用__import__,exec,eval函数.PyInstaller对于这种情况会在warn*.txt日志中留下一句警告:W: delayed  __import__ hack detected at line 0 - adodb (D:\Program Files\Python25\Lib\site-packages\adodb\adodb.pyc)
这句警告说明了adodb.py中通过非常手段导入了一个未知模块.通过查看adodb.py发现它确实是通过__import__导入了一个模块:adodb_odbc.
解决该问题的步骤如下,在PyInstaller根目录的hooks写一个名为hook-adodb.py的文件内容为:
hiddenimports = ['adodb_odbc']
在这个目录上可以发现PyInstaller对于诸多已知模块已经内置提供了相应的hook文件.
接下来删除打包所生成的一些文件,再次执行打包过程,OK.

一些感想:对于非python项目,可以尝试用Python进行快速原型
开发,如验证算法等,当项目期限将至时,转化为其它语言的时间不够时,可用PyInstaller将这个Python程序转化为exe,然后将这个exe分发给最终用户,这样对已有的系统布署不会造成过大的冲击.