第三周:同时管理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进行打包,然后就成功了!

原文地址:https://www.cnblogs.com/fangziyuan/p/13346337.html