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進行打包,然后就成功了!