PyInstaller打包Python项目时holidays模块找不到的问题求助
PyInstaller打包时无法找到holidays模块的解决方法
问题背景
基于Anaconda虚拟环境开发的tkinter GUI项目,依赖pandas与holidays模块,使用PyInstaller打包时,已通过pyinstaller main.py --hidden-import openpyxl.cell._writer -w解决openpyxl缺失问题,但添加--hidden-import holidays后仍报错:
Traceback (most recent call last): File "kiesel_gui.py", line 3, in <module> import kiesel_simulator File "PyInstaller\loader\pyimod02_importers.py", line 391, in exec_module File "kiesel_simulator.py", line 5, in <module> import seasonality_builder as src File "PyInstaller\loader\pyimod02_importers.py", line 391, in exec_module File "seasonality_builder.py", line 4, in <module> import holidays ModuleNotFoundError: No module named 'holidays'
解决步骤
确保激活正确的Anaconda虚拟环境
打包前必须激活项目对应的虚拟环境,避免PyInstaller调用全局Python环境的依赖。激活命令:conda activate 你的虚拟环境名直接调用虚拟环境内的PyInstaller
部分情况下激活环境后仍可能调用全局PyInstaller,可使用虚拟环境内的PyInstaller完整路径执行打包,示例路径:C:\Users\你的用户名\anaconda3\envs\你的环境名\Scripts\pyinstaller.exe main.py --hidden-import openpyxl.cell._writer --hidden-import holidays -w检查holidays模块的安装位置
在激活的虚拟环境中执行以下命令,确认holidays安装在当前虚拟环境的site-packages下:pip show holidays若Location显示为全局Python路径,需重新在虚拟环境内安装:
pip install holidays使用.spec文件手动配置隐藏导入
命令行参数不生效时,可通过spec文件强制指定依赖:- 生成spec文件:
pyinstaller main.py -w - 打开生成的
main.spec文件,找到hiddenimports字段,修改为:hiddenimports=['openpyxl.cell._writer', 'holidays'] - 基于spec文件重新打包:
pyinstaller main.spec
- 生成spec文件:
清除缓存后重新打包
旧缓存可能导致依赖收集异常,添加--clean参数清除缓存后重新打包:pyinstaller main.py --hidden-import openpyxl.cell._writer --hidden-import holidays -w --clean
内容的提问来源于stack exchange,提问作者ManintheArena
相关产品推荐
相关产品推荐

