Exchangelib 和 Py 安装程序 - ZoneInfo - Tzdata - UTC 问题

exchangelib and pyinstaller - zoneinfo - tzdata - UTC issue

在我的 python 项目中,我正在使用 exchangelib,我需要创建一个 exe 文件。 使用 pyinstaller --onefile 我有 UTC 错误(通常是 tzdata)- “关键 UTC 中没有时区”。 简化所有并关注此问题 https://github.com/ecederstrand/exchangelib/issues/897 我注意到这个简单代码的问题是一样的:

from zoneinfo import ZoneInfo
utc = ZoneInfo('UTC')

我也尝试过使用 py2exe,cx_freeze,强制导入 tzdata,同样的问题。

我花了很多时间寻找解决方法,我想分享我的临时解决方案,但也想讨论其他替代解决方案。

我发现的解决方法是使用 pyinstaller --onedir (https://pyinstaller.readthedocs.io/en/stable/usage.html) 并在 pyinstaller 创建的主目录中手动复制 tzdata 文件夹 (\Python\Python39\Lib\site-packages\tzdata)。 你有更优雅的其他解决方案吗?

我使用的是spec文件进行打包,将配置中的资源文件进行打包

二进制文件=[('C:\ProgramData\Anaconda3\Lib\site-packages\tzdata\zoneinfo\UTC','tzdata\zoneinfo')] pathex=['C:\ProgramData\Anaconda3\Lib\site-packages\tzdata\zoneinfo'] hiddenimports=['tzdata.zoneinfo']

在探索不同的选项后,这对我有用:

pyinstaller --collect-all tzdata --onefile file_name.py

PS: 我一直面临这个问题,来到这里探索pyinstaller。您的解决方案也有效,但它是我希望它成为 exe 的目录。