上次用python的adodb模塊寫了個訪問access數(shù)據(jù)庫的程序,發(fā)布時想打包成單獨的一個exe文件,完成這個任務的工具是PyInstaller,我試過用它打包一些小python程序,一次就成功了,但adodb就不行了,似乎沒辦法將adodb模塊打包進去.通過查看手冊,總算明白是怎么回事了,PyInstaller無法獲知通過非常手段導入的模塊,
調(diào)用__import__,exec,eval函數(shù).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發(fā)現(xiàn)它確實是通過__import__導入了一個模塊:adodb_odbc.
解決該問題的步驟如下,在PyInstaller根目錄的hooks寫一個名為hook-adodb.py的文件內(nèi)容為:
hiddenimports = ['adodb_odbc']
在這個目錄上可以發(fā)現(xiàn)PyInstaller對于諸多已知模塊已經(jīng)內(nèi)置提供了相應的hook文件.
接下來刪除打包所生成的一些文件,再次執(zhí)行打包過程,OK.

一些感想:對于非python項目,可以嘗試用Python進行快速原型
開發(fā),如驗證算法等,當項目期限將至時,轉(zhuǎn)化為其它語言的時間不夠時,可用PyInstaller將這個Python程序轉(zhuǎn)化為exe,然后將這個exe分發(fā)給最終用戶,這樣對已有的系統(tǒng)布署不會造成過大的沖擊.