You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyInstaller打包的exe执行报错:skimage导入引发ValueError(存根文件缺失)

解决PyInstaller打包scikit-image时的存根文件缺失问题

问题根源

scikit-image依赖lazy_loader实现模块延迟加载,PyInstaller默认未正确收集lazy_loader模块,也未打包skimage所需的.pyi存根文件,导致运行时触发文件找不到的错误。

分步解决方案

1. 补充缺失的隐藏导入

直接在打包命令中添加lazy_loader的隐藏导入,同时保留skimage相关的导入配置,修改后的命令如下:

pyinstaller name.py --debug=all -c --icon=icon.png --onefile --hidden-import=skimage --hidden-import=skimage.metrics --hidden-import=lazy_loader

2. 完善自定义Hook文件

若第一步无效,重新编写更完整的hook-skimage.py,确保收集所有存根文件并强制导入依赖模块:

from PyInstaller.utils.hooks import collect_data_files

# 收集skimage目录下所有的.pyi存根文件
datas = collect_data_files('skimage', includes=['**/*.pyi'])

# 强制将lazy_loader加入隐藏导入列表
hiddenimports = ['lazy_loader']

将该文件放入单独的文件夹(比如./hooks),打包时指定hooks目录:

pyinstaller name.py --debug=all -c --icon=icon.png --onefile --additional-hooks-dir=./hooks

3. 手动复制存根文件(应急方案)

如果Hook方案仍不生效,找到Python环境中skimage的安装路径(通常在Lib/site-packages/skimage),将所有.pyi文件复制到exe所在目录下新建的skimage文件夹中,运行exe时会自动读取该目录的文件。

4. 降级scikit-image版本(可选)

新版本scikit-image的延迟加载逻辑可能与PyInstaller存在兼容性问题,可尝试降级到0.19.3版本:

pip install scikit-image==0.19.3

重新打包后测试运行效果。

内容的提问来源于stack exchange,提问作者MrSpexxx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 19:05:17