上次用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分發給最終用戶,這樣對已有的系統布署不會造成過大的沖擊.