PyInstaller打包exe后无法获取dateutil时区信息,求解决办法
解决PyInstaller打包dateutil时区丢失问题
问题原因
PyInstaller默认不会自动打包dateutil库中zoneinfo目录下的时区数据文件,这些文件是dateutil.tz.gettz()获取时区信息的依赖资源,缺失会导致无法加载时区,返回None。
解决办法
方法1:打包命令中添加--add-data参数
在打包命令里直接指定需要包含的时区数据目录,Windows系统下路径分隔符用分号;:
py -m PyInstaller --onefile --add-data "你的Python路径/Lib/site-packages/dateutil/zoneinfo;dateutil/zoneinfo" path/to/test.py --distpath resulting/path/folder
替换你的Python路径为实际路径,比如虚拟环境的venv\Lib\site-packages或者系统Python安装目录
方法2:通过.spec文件配置数据文件
- 先生成.spec文件:
py -m PyInstaller --onefile path/to/test.py --distpath resulting/path/folder
- 打开生成的
test.spec文件,找到datas参数,添加时区数据目录:
a = Analysis( ['path/to/test.py'], pathex=[], binaries=[], datas=[('你的Python路径/Lib/site-packages/dateutil/zoneinfo', 'dateutil/zoneinfo')], # 添加这一行 ... )
- 使用.spec文件重新打包:
py -m PyInstaller test.spec
方法3:安装dateutil的tzdata扩展包
如果你的dateutil版本>=2.5.0,可以安装带tzdata扩展的dateutil,它会自带完整的时区数据,PyInstaller能更好地识别:
pip install python-dateutil[tzdata]
安装完成后重新打包脚本即可。
验证
打包完成后运行生成的exe,应该输出tzfile('America/Los_Angeles'),而非None。
内容的提问来源于stack exchange,提问作者joe
相关产品推荐
相关产品推荐

