pyinstaller打包遇到的坑【总结】

执行pyinstaller命令后,一般都会在项目根目录生成一个.spec的文件,现在基于该文件进行修改。

Q:为什么不在pyinstaller命令修改?
S:命令修改不直观,且文件中可以执行python代码,方便处理大批量数据

现象1:

出现类似问题,就是项目过大,打包深度超出预设

=============================================================
A RecursionError (maximum recursion depth exceeded) occurred.
For working around please follow these instructions
=============================================================

1. In your program's .spec file add this line near the top::

     import sys ; sys.setrecursionlimit(sys.getrecursionlimit() * 5)

2. Build your program by running PyInstaller with the .spec file as
   argument::

     pyinstaller myprog.spec

3. If this fails, you most probably hit an endless recursion in
   PyInstaller. Please try to track this down as far as possible,
   create a minimal example so we can reproduce and open an issue at
   https://github.com/pyinstaller/pyinstaller/issues following the
   instructions in the issue template. Many thanks.

Explanation: Python's stack-limit is a safety-belt against endless recursion,
eating up memory. PyInstaller imports modules recursively. If the structure
how modules are imported within your program is awkward, this leads to the
nesting being too deep and hitting Python's stack-limit.

With the default recursion limit (1000), the recursion error occurs at about
115 nested imported, with limit 2000 at about 240, with limit 5000 at about
660.

解决:

# .spec文件中添加
import sys ; sys.setrecursionlimit(sys.getrecursionlimit() * 5)

现象2:

这个报错是无法加载到Crypto.Cipher相关包的内容导致的

OSError: Cannot load native module 'Crypto.Cipher._raw_ecb': Not found '_raw_ecb.cpython-310-x86_64-linux-gnu.so', Not found '_raw_ecb.abi3.so', Not found '_raw_ecb.so'

解决:
参考我的另一篇内容:https://blog.youkuaiyun.com/Types_c/article/details/147380644?spm=1001.2014.3001.5501

现象3:

出现包导入失败的问题

    import sentence_transformers
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "PyInstaller/loader/pyimod02_importers.py", line 450, in exec_module
  File "sentence_transformers/__init__.py", line 14, in <module>
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "PyInstaller/loader/pyimod02_importers.py", line 450, in exec_module
  File "sentence_transformers/cross_encoder/__init__.py", line 3, in <module>
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "PyInstaller/loader/pyimod02_importers.py", line 450, in exec_module
  File "sentence_transformers/cross_encoder/CrossEncoder.py", line 19, in <module>
  File "<frozen importlib._bootstrap>", line 1075, in _handle_fromlist
  File "transformers/utils/import_utils.py", line 1955, in __getattr__
  File "transformers/utils/import_utils.py", line 1969, in _get_module
RuntimeError: Failed to import transformers.models.auto because of the following error (look up to see its traceback):

解决:
.spec datas 下添加对应的包,例如:
('yourpath/python3.10/site-packages/transformers/models/auto/*','transformers/models/auto/')

现象4:

FileNotFoundError: [Errno 2] No such file or directory: '/tmp/_MEItO35DO/transformers/models/aria'

解决:
参考现象3的解决方式,把对应的文件打包到transformers/models/aria文件夹下即可。

现象5:

RuntimeError: Failed to import transformers.models.auto.modeling_auto because of the following error (look up to see its traceback):
Failed to import transformers.generation.utils because of the following error (look up to see its traceback):
No module named 'sklearn.metrics._pairwise_distances_reduction._datasets_pair'

解决:
hiddenimports中添加sklearn.metrics._pairwise_distances_reduction._datasets_pair对应的module,named后就是module的名称,复制添加就行

现象6:(重点)

import requests,大部分人第一时间在hiddenimports添加报错的依赖,都会发现还是报错,在datas和hiddenimport添加了requests也没有解决

    from .embeddings import (  # noqa: F401
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "PyInstaller/loader/pyimod02_importers.py", line 450, in exec_module
  File "dbgpt/rag/embedding/embeddings.py", line 6, in <module>
    import requests
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "PyInstaller/loader/pyimod02_importers.py", line 450, in exec_module
  File "requests/__init__.py", line 164, in <module>
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "PyInstaller/loader/pyimod02_importers.py", line 450, in exec_module
  File "requests/api.py", line 11, in <module>
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "PyInstaller/loader/pyimod02_importers.py", line 450, in exec_module
  File "requests/sessions.py", line 15, in <module>
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "PyInstaller/loader/pyimod02_importers.py", line 450, in exec_module
  File "requests/adapters.py", line 81, in <module>
FileNotFoundError: [Errno 2] No such file or directory

解决:

# 在datas中添加*.dist-info文件,基本解决
 ('/yourpath/site-packages/requests-2.32.3.dist-info/*','requests-2.32.3.dist-info/')

dist-info它为包的安装、管理和分发提供了标准化的元数据存储和管理方式,基本类似问题报错,只要你能找到对应的.dist-info文件夹,90%是这个导致的

大家还有什么问题和解决方案可以沟通一下!!!!!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的小豆子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值