Pyinstaller打包错误解决--ui文件

打包命令:pyinstaller xx.py
可能会出现以下错误,但是不要慌,报错了也会生成一个xx.spec文件,以下几种错误都可以通过修改xx.spec文件解决。
然后:pyinstaller xx.spec

1、RecursionError: maximum recursion depth exceeded。
原因:可能是某个库或者函数递归次数太多了,超出限制。
解决办法:在xx.spec中添加两行:

import sys
sys.setrecursionlimit(5000)

5000如果还报错的话可以自己再加。

2、ModuleNotFoundError: No module named ‘pkg_resources.py2_warn’。
原因:找不到模块。一些第三方库只能自己乖乖去pip了,但是这个明显是一个库里的小模块,只要在xx.spec中引入就好了。
解决方法:修改xx.spec中的hiddenimports。

hiddenimports=['pkg_resources.py2_warn'],

3、针对用qt的图像界面。FileNotFoundError: [Errno 2] No such file or directory: ‘C:\Users\AppData\Local\Temp\_MEI213802\mapCompare_dialog_base.ui’。
原因:找不到UI文件。我的ui明明就在里面啊,看不到吗?为啥去其他路径了呀?无解。
解决办法:(1)、打包文件夹的可以直接把UI文件扔进去。(2)、修改xx.spec中的datas,以及在主函数加了一个函数。(打包单独exe或者文件夹都可以用这个)
xx.spec中的修改:

datas=[("mapCompare_dialog_base.ui",".")]

主函数的函数:

def resource_path(relative_path):
    """ Get absolute path to resource, works for dev and for PyInstaller """
    try:
        # PyInstaller creates a temp folder and stores path in _MEIPASS
        base_path = sys._MEIPASS
    except Exception:
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)

qtCreatorFile = "mapCompare_dialog_base.ui"  # Enter file here.

Ui_MainWindow, QtBaseClass = uic.loadUiType(resource_path(qtCreatorFile))

最重要的打包不要忘了呀:pyinstaller xx.spec。

你可能感兴趣的:(踩坑长经验)