如何解决PyInstaller打包时Warning:lib not found的问题

学了一段时间的Python,但都是自己用。前不久写了个数据转换的小工具,同事很感兴趣,问能否共享给他使用。由于他不是技术人员,如果让他再去安装和运行什么Python就太麻烦了,就决定试试用PyInstaller来打个包,做成一个可执行文件。

按照网上的说明,安装好PyInstaller,打包……试了试,可以正常运行,就通过邮箱发给同事了。

翌日,同事发邮件过来,说我发给他的程序打不开,并附了个截图。

问题1:

“此文件的版本与正在运行的windows版本不兼容。请检查计算机的信息以了解需要x86还是x64版本的程序,然后联系软件发布者”

经过了解,对方使用的是Win7 32位系统,我使用的是Win10 64位,Python 3.6 64位。

上网搜索后,发现是因为PyInstaller打包的程序,与Python的版本有关(因为安装时,pip已经自动按照Python的版本进行了匹配),64位的Python,打包的就是64位程序,32位的Python,打包的就是32位系统。而且还建议最好不要按照64位的Python,否则打包的文件,会造成很多人用不了。

问题2:

即使对方恰好也是64位Windows,也会有问题,会提示“api-ms-win-crt-*-l1-1-0.dll”找不到,无法运行。因为我用到了一些需要调用windows API的程序代码,而这些代码在打包编译后,会需要调用Windows的对应API文件入库,如果无法找到,就会报错。由于用于Windows的产品,几乎都是采用Visual C++来编写的,所以必须要安装VC++运行库,否则……

问题3:

其实和上面的问题2有关系,就是打包的时候,提示Warning:lib not found的问题,主要还是没有找到这些dll文件,系统打包时还是有问题。

如何解决呢。

1.卸载64位Python,仅安装32位版本。

不,绝不妥协。凭什么我不能安装两个不同的版本。搜索后发现,可以通过安装virtualenv来解决。我可以同时安装32位系统和64位系统。但是需要分别下载和安装各自的pip库(64位的可继承使用原64的库文件)。不需要使用模拟环境的,退出即可。

2.修改SPEC文件。

换为32位版本后,重新编译时,还是会提示有lib not found的警告。此时打开*.spec文件进行编辑。

在其中的pathex字段中,添加api-ms-win-crt-*-1-0.dll的文件路径。通常如果安装了VC++运行库的话,其地址为“C:\Program Files\Windows Kits\10\Redist\ucrt\DLLs\x86”(32位操作系统)或“C:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs\x86”(64位操作系统)。此处选用的是VC++的32位版本库文件。

再次运行pyinstaller --clean demo.spec文件后,可以看到不再有lib not found的警告,生成的demo.exe也可正常运行在win7 32位的电脑上。

如果仍有提示api-ms-win-crt-*-1-0.dll文件缺失,最好还是要在目标系统上安装VC++运行库环境。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值