使用PyInstaller打包含gradio_rangeslider的Gradio程序时出现ModuleNotFoundError问题求助
PyInstaller打包含gradio_rangeslider的Gradio程序时出现ModuleNotFoundError问题求助
我正在尝试用PyInstaller打包一个使用Gradio做GUI,同时用到了自定义Gradio插件gradio_rangeslider的Python程序。
之前我没法正常导入gradio,后来通过添加--collect-data=gradio和--collect-data=gradio_client命令行参数,还在.spec文件里指定gradio以py文件模式导入,才解决了问题。
我用这条命令生成了.spec文件:
pyi-makespec --additional-hooks-dir="build_deps\\" --collect-data=gradio_client --collect-data=gradio --hidden-import pyarrow.vendored.version --onefile Program_name.py
生成的.spec文件内容如下:
# -*- mode: python ; coding: utf-8 -*- from PyInstaller.utils.hooks import collect_data_files datas = [] datas += collect_data_files('gradio_client') datas += collect_data_files('gradio') a = Analysis( ['Program_name.py'], pathex=[], binaries=[], datas=datas, hiddenimports=['pyarrow.vendored.version'], hookspath=['build_deps\\'], hooksconfig={}, runtime_hooks=[], excludes=[], noarchive=False, optimize=0, module_collection_mode={ 'gradio': 'py', }, ) pyz = PYZ(a.pure) exe = EXE( pyz, a.scripts, a.binaries, a.datas, [], name='Program_name', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, upx_exclude=[], runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, )
随后我执行了打包命令:
pyinstaller --clean --noconfirm Program_name.spec
.exe文件成功生成,但运行时却抛出了如下错误:
Traceback (most recent call last): File "Program_name.py", line 22, in <module> ModuleNotFoundError: No module named 'gradio_rangeslider' [PYI-24644:ERROR] Failed to execute script 'Program_name' due to unhandled exception!
我尝试过两种解决方式:
- 在
pyi-makespec命令中添加--collect-data=gradio_rangeslider参数 - 在.spec文件的
module_collection_mode里配置gradio_rangeslider为py编译模式:module_collection_mode={ 'gradio': 'py', 'gradio_rangeslider ': 'py' },
但依然出现相同的错误。所有模块都安装在Python虚拟环境中,PyInstaller也是在该虚拟环境内运行的,直接运行Python脚本时一切正常。
编辑补充:后来我在PyInstaller的命令行输出里发现了这条警告:
WARNING: collect_data_files - skipping data collection for module 'gradio_rangeslider' as it is not a package.
我不清楚为什么它会认为gradio_rangeslider不是一个包,希望能得到大家的帮助。
备注:内容来源于stack exchange,提问作者Liam
相关产品推荐
相关产品推荐

