PyInstaller:Python 程式轉換失敗
今天試著用 Pyinstaller 把 Python 的程式轉成執行檔時,遇到一個我覺得很棘手的問題,導致轉換出來的程式都不能用。
通常我也不太會去轉換執行檔,但是我如果是用 PyQt5 製做得程式,通常會試著看看能不能包裝起來,給別人用得時候就是只有介面,也不用擔心他們用得時候程式會被修改。
轉換過程雖有一些錯誤,但還是可以把程式轉換出來,但轉出來的執行檔怎麼樣就是打不開,先來看看下面丟出來的 bug。
Fatal Python error: initfsencoding: unable to load the file system codec
ModuleNotFoundError: No module named 'encodings'
Current thread 0x00003c8c (most recent call first):
說實話,完全不懂要表達什麼啊啊啊 щ(゚Д゚щ)
原本想說會不會是 Pyinstaller 的版本有問題或是沒裝好,砍掉重新安裝舊版本,發現舊版本裝不起來,看 Error 似乎是 enum
這個模組有問題,但是安裝回原來版本卻可以成功安裝,之前都沒這個問題啊。
重新裝完之後,抱著一絲絲希望去轉換看看,看看能不能成功,結果轉出來的東西還是一樣不能開,而且還是一樣的錯誤啊啊啊 щ(゚Д゚щ)
既然這樣,這次決定好好看看轉換過程發生了什麼問題。忘記截圖中間過程了,但是主要就是出現下面的 Error。
AttributeError: module 'enum' has no attribute 'IntFlag'?
之前轉換都沒這問題,今天多裝了一個影像感測器的模組 (pyueye) 之後,就一直轉換失敗了。既然上面的錯誤是說enum
有問題,那就把它砍掉看看,沒想到,居然就成功了!!!
雖然成功了,但感覺還是很不爽,上網查了一下 (link),大概就是enum
這個模組在新版 Python 已經不用了,因此無法正確執行,所以刪掉就可以了。
結語
雖然說問題是很快排除,但裝個新模組就讓 Pyinstaller 無法正常工作,還是覺得很@^em>!@</em)#,雖然以前用 Pyinstaller 就遇過其他模組無法正常包裝的問題,看來 Python 要整合成應用程式還是很雞肋啊,小程式問題不大,但大程式問題就大條了,太多相關的模組需要包裝起來,而且整合出來的檔案也特大,不知道正常要發布完成的 Python 作品是用什麼方法。