pyinstaller打包时出现的一些错误

1、遇到错误时 File "stringsource", line 104, in init scipy.interpolate.interpnd
AttributeError: type object 'scipy.interpolate.interpnd.array' has no attribute '__reduce_cython__'
[34604] Failed to execute script demo2

解决方法:

打包时导入隐藏包     pyinstaller -F XXX.py --hidden-import scipy._lib.messagestream

2、打包时路径问题

导入模型时不能直接使用相对路径。可以使用绝对路径,但是移动到其他设备上时比较麻烦,因此出现了冻结路径的方法。

增加一个文件frozen_dir.py

# -*- coding: utf-8 -*-
"""
Created on Sat Aug 25 22:41:09 2018
frozen dir
@author: yanhua
"""
import sys
import os
 
def app_path():
    """Returns the base application path."""
    if hasattr(sys, 'frozen'):
        # Handles PyInstaller
        return os.path.dirname(sys.executable)
    return os.path.dirname(__file__)


在代码中调用frozen_dir的方法:

import frozen_dir
SETUP_DIR = frozen_dir.app_path()
 
FONT_MSYH = matplotlib.font_manager.FontProperties(
                fname = SETUP_DIR + r'\data\fonts\msyh.ttf',
                size = 8)
 
DIR_HELP_DOC = SETUP_DIR + r'\data\docs'
DIR_HELP_VIDEO = SETUP_DIR + r'\data\videos'

3、未打包opencv的问题

自己手动添加,文件名opencv_ffmpeg341_64.dll

4、UnicodeDecodeError: 'utf-8' codec can't decode byte 0xce in position 126: invalid continuation byte

先在命令行输入:chcp 65001

5、涉及到TensorFlow的代码,直接封装并执行可能会由于TensorFlow的问题而异常,因此需要在打包时指定依赖库,通过如下命令打包:

pyinstaller -F --hiddenimport tensorflow **.py

6、打包caffe代码时,打包成功后,运行出现AttributeError: 'module' object has no attribute 'LabelMap'错误

在打包时加上sudo, 例如:sudo pyinstaller ......

7、打包完执行过程出现的错误,You may load I/O plugins with the `skimage.io.use_plugin` command.  A list of all available plugins 。

新建一个hook-skimage.io.py文件,里边的内容为:

from PyInstaller.utils.hooks import collect_data_files, collect_submodules

datas = collect_data_files("skimage.io._plugins")
hiddenimports = collect_submodules('skimage.io._plugins')

hook-skimage.io.py文件放在hooks文件夹下,打包时添加--additional-hooks-dir=./hooks命令

例如:sudo pyinstaller -F --hidden-import=pywt --hidden-import=pywt._extensions._cwt --additional-hooks-dir=./hooks test.py

 

### PyInstaller 打包错误解决方案 当使用 PyInstaller 进行 Python 脚本打包,可能会遇到各种类型的错误。以下是针对常见问题的解决方案: #### 1. **未找到 `pyinstaller` 的情况** 如果在命令行输入 `pyinstaller` 后提示未找到该工具,则可以通过指定其绝对路径来解决问题。具体操作如下:进入安装目录下的 Scripts 文件夹,复制其中 pyinstaller.exe 的完整路径,在执行命令将其作为替代[^1]。 例如: ```bash "C:\Python39\Scripts\pyinstaller.exe" your_script.py ``` --- #### 2. **递归深度超限 (RecursionError: maximum recursion depth exceeded)** 此问题是由于 PyInstaller 在解析依赖项触发了过多嵌套调用所致。解决方法之一是增加 Python 中的最大递归层数限制。可以在运行脚本前设置环境变量或通过修改代码实现这一目标[^2]。 调整方式如下: - 使用 `-r/--recursion-limit` 参数启动解释器; - 或者编辑源码加入以下内容: ```python import sys sys.setrecursionlimit(5000) # 提高默认值至更高水平 ``` 随后重新尝试构建过程即可缓解此类异常现象的发生频率。 --- #### 3. **关于 NumPy 升级引发的问题** 部分开发者反馈说某些情况下升级 numpy 库能够修复潜在冲突;然而需要注意的是只有当实际开发环境中已经存在兼容性隐患才会如此处理——即确认并非单纯因为打包环节引入的新矛盾所引起后再采取行动更为稳妥一些[^3]。 因此建议先验证当前项目是否真的受到旧版影响再决定下一步动作而不是盲目更新库版本号以免造成不必要的连锁反应甚至破坏原有功能稳定性。 --- #### 4. **模块缺失 (`ModuleNotFoundError`)** 对于像 `'Crypto.Math'` 这样的特定子模块无法定位的情况,通常是因为加密相关扩展未能被正确包含进去的缘故[^4]。对此可考虑显式导入所需组件或者切换到支持更广泛的标准库替代品比如 pycryptodome 来规避上述局限性从而顺利完成整个编译流程而无需担心遗漏任何必要组成部分。 另外还可以借助隐藏imports选项手动添加缺少的部分给定参数形式如下所示以便于让程序识别额外需求并妥善安排它们的位置关系确保最终产物具备完整的功能性表现出来供用户正常使用而不至于崩溃退出等情况发生: ```bash pyinstaller --hidden-import=Crypto.Math your_script.py ``` --- ### 总结 以上列举了几种常见的 PyInstaller 打包过程中可能出现的错误及其对应的解决办法。每一种情形都需要仔细分析根本原因才能有效应对。希望这些指导可以帮助您顺利克服障碍完成高质量的应用部署工作!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值