使用Pyinstaller打包时遇到的一些问题及解决方案

一、Failed to extract PIL\_imaging.cp311-win_amd64.pyd: decompression resulted in return code -1!


出现这个报错说明大概率是你的磁盘空间不够了,可以删除一些不用的文件,尤其是系统盘,就能够解决。
 

二、No module named ‘yyyy‘

检查你的环境是否已经安装了对应的包,如果没有,直接pip install解决。

三、No such file or directory: ‘C:\Users\qhcsu\AppData\Local\Temp\_MEI106802\xxxx\...\...\...’

这个报错说明找不到我们的文件,对于这一类的报错有一个统一的解决办法,找到你环境中的pyinstaller,里面一个hooks文件夹,在这个文件夹中添加一个文件,注意命名格式统一为  'hook-xxxx.py',然后里面写入这两行代码:

from PyInstaller.utils.hooks import collect_data_files
datas = collect_data_files(“xxxx”)

注意两处xxxx的要对应错误信息的xxxx,问题解决。

四、ModuleNotFoundError: No module named ‘mmcv._ext‘

这个报错在网上有很多解决方法,但不适用于pyinstaller打包报错的情况,因为我在本地调试的时候是没有这个错误,说明是打包时出现的问题(因此不建议去下载mmcv-full,原因是最新版的已经改名为mmcv,到时又得下回来,别问我是怎么知道的),其实不只是这个文件,这一类的报错同样有一个统一的解决办法,就是在你的打包命令中加上  '--hidden-import mmcv.ext'  ,报错其他文件名也是一样的格式替换就好,解决。

五、[Error 2]:No such file or directory:'C:\\Users\\86166\\AppData\\Local\\Temp\\_Mel149962\\....\\....\\....

注意这个报错与第四个错误的区别:这个报错是我已经能够正常打开程序,但是发现有一些功能在打包后出问题了,经过异常捕获得出的报错;而第四个错误是打开程序时直接报错,导致程序连打开都不行。

解决方法:在定位到错误程序段后,发现文件的路径定义时使用了os模块,这里需要注意在打包后pyinstaller会os到 'C:\\Users\\86166\\AppData\\Local\\Temp' 这个路径而不是你本地调试时希望他找到的路径,因此解决办法就是将对应的路径改成相对路径或者绝对路径,这样就没有问题了。

但是我们打包的目的就是希望程序在另一台电脑也能够正常运行,因此我们可以使用函数:os.path.dirname(sys.argv[0])来获取正确的文件路径,将他赋给一个变量a,则变量a的值就是你的项目文件夹下dist文件夹(生成你的exe的文件夹)的路径,之后可以将你需要的文件复制一份到dist文件夹,然后通过路径a/../../..来定位你的文件。

最后注意每次修改后都要重新打包,将build,dist,.spec文件删掉后重新执行打包命令即可。

六、PyInstaller.isolated._parent.SubprocessDiedError: Child process died calling import_library() with args=('skimage.io',) and kwargs={}. Its exit code was 3.

解决方法:加上--hidden-import=skimage.io即可

比如:pyinstaller -F -i seedling.ico --hidden-import=skimage.io application.py

七、FileNotFoundError: [Errno 2] No such file or directory: '../output_result/phenotype_trait_result/2023_02_23/Result_parameter/projected_perimeter/PP_2023_02_23_10_14_14_730_472_3580_30_0_562_3544_1603_827.jpg'

明明有这个路径还是一直报错,后来发现好像是因为路径太长了,路径长度有限制,将路径改短就不会发生这个错误了。

八、第二个问题No module named ‘yyyy‘, ‘yyyy‘如果是自定义的包

我打包时遇见了这个问题,自定义的模块my_test_model找不到。解决方法,把自定义模块所在的路径添加到.spec文件Analysis中的pathex里面,如下图。

九、有时候可能需要重新建立一个虚拟环境

当我把第七个问题在代码里面修改之后,我在PyCharm中可以正常运行程序,但是当我打包出来,就会发生奇怪的错误(打包出来之后还是按照以前未修改前的程序执行的,所以还是报错,明明程序已经修改了)。反复尝试了不同的打包方式,也使用pyinstaller --clean去打包,都不行。代码里面肯定没问题,最后想会不会是虚拟环境的问题,尝试新建了一个虚拟环境,并且把需要的包都下载好,使用新建的虚拟环境去打包,然后成功解决!(不太清楚原本的虚拟环境打包出来为啥不能正常执行,反正就尝试吧)。


————————————————
前5条转自CSDN博主「m0_69704298」的原创文章
原文链接:https://blog.csdn.net/m0_69704298/article/details/132021970

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值