pyinstaller遇到的问题总结

pyinstaller遇到的问题总结

1.RecursionError: maximum recursion depth exceeded

解决步骤:

1)pyinstaller -F xxx.py

​ 这一步肯定会报上述错误导致失败,但是会产生一个xxx.spec文件

2)在xxx.spec文件中增加两行(添加在原文件第二行):

import sys
sys.setrecursionlimit(5000)

3)pyinstaller xxx.spec

打包成功。

2.UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xce in position

解决方法:在你打包的命令行中先输入chcp 65001 然后再输入打包命令。

3.WARNING: file already exists but should not: C:\…\…\…\Local\Temp_MEI58962\include\pyconfig.h

报错内容可能不同,但都是xxx已存在,问题的原因是pyinstaller打包时pyconfig.h多打了一次,所以会报已经存在了。这个解决方案就是把多余的pyconfig.h去掉。具体解决方法如下:

在自动生成的xxx.spec中,添加如下代码,去掉多余依赖项:

#add_begin
for d in a.datas:
    if 'pyconfig' in d[0]:
        a.datas.remove(d)
        break
#add_end

位置在a后面,pyz前面。

4.WARNING: file already exists but should not: C:\…\…\…\Local\Temp_MEI165842\torchvision_C.cp37-win_amd64.pyd

这个试了挺多办法,还未解决,有解决了的大哥麻烦告知一下,感激不尽!!!

5.最麻烦的,torch和torchvision打包问题,exe在自己电脑上能用,在其他电脑上就报错如下:

其实主要问题是pyinstaller不支持torchvision在0.3.0以上的版本。但是,要给torchvision降级什么的·····不多说了,懂的都懂!!!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rT1z876E-1600249368225)(https://user-images.githubusercontent.com/34004152/74804720-5e0c1680-5324-11ea-8974-ce18e0692b42.png)]

所以,真解决方案:在GitHub上找到了大佬的解决方法:

这里详细说一下:在主文件,也就是你要打包的文件头部添加

def script_method(fn, _rcb=None):
    return fn
def script(obj, optimize=True, _frames_up=0, _rcb=None):
    return obj
import torch.jit
torch.jit.script_method = script_method
torch.jit.script = script

不过记得添加在import torch后面,否则会报错。

有的可能在这一步就好了,但是,可能会发现打包出来的exe文件没有变大,因为torch和torchvision之类的库并没有打包进exe,于是在其他电脑上运行依然报错。这里就要修改spec文件了,在a = Analysis里修改path和hiddenimports:

datas=[(path.join(site_packages,"torch"), "torch"),
                (path.join(site_packages,"torchvision"), "torchvision"),
                (path.join(site_packages,"cv2"), "cv2")],
             hiddenimports=['torch', 'torchvision', 'cv2'],

这里我的site_packages在"F:\Anaconda3\Lib\site-packages",即自己电脑anaconda里的拓展库位置。

其实这不可能也不行,但是这时候我正好注意到了pyinstaller xxx.spec时所报的信息:

image-20200916172325903

注意到那一堆warning没,这张图是没问题的图,这些warning暂时没发现有啥影响,但在之前还有其他warning的,是torch和torchvision报的,也是缺少dll,不过这些dll在电脑上其实都有,只是pyinstaller太蠢了,找不到,都在"site-packages"里,把他们一个个找到复制到要打包文件目录就行了,我这里需要的文件如下图:

image-20200916172719088

这些dll都是我一个个搜索,然后复制过来的,每个人的torch和torchvision版本都可能不一样,大家各找各的就行了。

顺带一提,我的环境是:

cuda = 10.0
torch = 1.1.0
torchvision = 0.3.0

这样应该就么得问题了,我看见有人OpenCV打包也遇到类似问题,我这里也收集一下解决方法:

首先也是把opencv_videoio_ffmpeg430_64.dll复制到主文件夹下,这个也是每个人的版本都不一样的,然后在主代码里加上一段:

import ctypes

try:
    temp = ctypes.windll.LoadLibrary('opencv_videoio_ffmpeg430_64.dll')

except:
    pass

应该就好了。

是不是以为完了????????

我还遇见其他问题了,,,,

因为我需要用到mmcv这个库,但它只要一打包就绝对出问题,,,

image-20200916173610493

顺藤摸瓜,File “setuptools\depends.py”, line 6, 在这里,我们进去看看:

image-20200916173717746

长得不咋地,,,挺能折腾我。

是因为绝对路径问题吧,好像pyinstaller可以冻结路径,懒得搞了,改成这样子就行了,不过事后记得改回来,不然在自己电脑上以后可能会报错!!!!

from py33compat import Bytecode
from py27compat import find_module, PY_COMPILED, PY_FROZEN, PY_SOURCE
import py27compat

到这里就告一段落了,如果有类似问题可以给我留言,万一我那天想起这个账号了随手登录看见了可以一起讨论下!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值