Python Holidays库编译为exe后报错:找不到holidays.countries模块
问题:Python应用编译为exe后出现
no module named holidays.countries错误 我用eel、pandas和holidays库开发了一款工具,用于获取波兰公共假日并完成报表计算。在PyCharm解释器中运行一切正常,可正常获取假日并生成报表,但将应用编译为exe后,执行报表生成函数时返回错误:no module named holidays.countries。
获取假日的代码
from datetime import datetime as dt import holidays holi = holidays.Poland(years=dt.today().year) # 之前也用过这段代码,结果完全一致 # holidays.country_holidays('PL', years=dt.today().year)
编译使用的命令
python -m eel main.py web --onefile --noconsole
补充信息
- 使用企业内网仓库,无法访问外部公共仓库
- PIP版本:23.3.2,Holidays版本:0.41
解决方法
1. 打包时手动指定隐藏导入
PyInstaller(eel底层依赖该工具)默认不会自动检测holidays库的countries子模块,导致打包后缺失。修改打包命令,添加hidden-import参数指定需要打包的子模块:
python -m eel main.py web --onefile --noconsole --hidden-import=holidays.countries --hidden-import=holidays.countries.poland
2. 通过.spec文件自定义打包配置
如果需要更灵活的打包配置,可先生成spec文件:
python -m eel main.py web --onefile --noconsole --spec
打开生成的main.spec文件,找到hiddenimports列表,添加缺失的模块:
hiddenimports=['holidays.countries', 'holidays.countries.poland'],
然后使用spec文件执行打包:
pyinstaller main.spec
3. 验证内网仓库的holidays包完整性
由于使用企业内网仓库,可能存在包不完整的情况,可强制重新安装holidays库确保依赖完整:
pip install holidays==0.41 --force-reinstall
内容的提问来源于stack exchange,提问作者Galdil
相关产品推荐
相关产品推荐

