1. 程式人生 > 實用技巧 >第三週:同時管理64位和32位版本的Python,並用Pyinstaller打包成exe

第三週:同時管理64位和32位版本的Python,並用Pyinstaller打包成exe

Pyinstaller打包成的exe檔案的執行是依賴作業系統的。32位的exe可以在32位和64位的電腦上執行,但是64位的exe只能在64位電腦上執行。

因為工作需要,電腦上需要安裝32位的Python3.8,經歷了很多波折orz 因為電腦上的Python版本太多太亂了。

當我把vscode的直譯器設定為32位的Python3.8時,發現編譯報錯:

ImportError: DLL load failed while importing win32api: %1 不是有效的 Win32 應用程式。

這其實就是因為位數不同導致的。因為我的庫(wmi)安裝的都是64位的,而我新裝的32位python因為某種原因和之前安裝的python版本糾纏不清,所以一import用的還是64位的庫,然後就不行了。。

查了好多資料。先是把電腦上用不到的Python版本都刪了。(要刪乾淨!)發現C盤Roaming這個資料夾裡有個奇怪的python資料夾,我的pip都導向這裡,我就乾脆都給刪了。

然後pip list一看,發現一夜回到解放前,所有的庫都沒了,那就重新安裝唄。

首先為了區別,新安裝的32位python把Scripts裡的pip.exe改成了pip32.exe,然後把外面的python.exe複製一下,改成python32.exe.

之所以要複製一下再改名,而不能直接改名,是因為pip會自動找名叫Python.exe的檔案,找不到就會報錯。(這個好像可以改,通過pip_script.py,但我並沒有找到這個檔案)。

這時,我再通過cmd輸入where python / where python32 / where pip / where pip32 這些命令後指向全部都正確了。

然後pip32 install pyinstaller等等一系列庫之後,再在vscode裡執行,發現沒有問題了!

然後就是打包,發現不知道為啥明明已經添加了PATH,但它只會從64位Python的那個資料夾裡尋找Pyinstaller, 找不到就會報錯。

於是我又查了查資料,發現可以這樣:

python32 -m PyInstaller -F readID.py

這樣就是指定了用32位版本的python下面的Pyinstaller進行打包,然後就成功了!