使用 pyinstaller 构建 exe 时未找到 APScheduler pytz-deprecation-shim
Posted
技术标签:
【中文标题】使用 pyinstaller 构建 exe 时未找到 APScheduler pytz-deprecation-shim【英文标题】:APScheduler pytz-deprecation-shim not found when building an exe with pyinstaller 【发布时间】:2022-01-08 01:31:30 【问题描述】:运行我使用 pyinstaller 构建的 exe 时,每次在程序中使用 APScheduler 时都会出错。
pkg_resources.DistributionNotFound: The 'pytz-deprecation-shim' distribution was not found and is required by tzlocal
我之前已经遇到过类似的问题:pytz、tzlocal 和 APScheduler 似乎使用的六个,但我可以通过创建一个 hook-pytz.py
hook-tzlocal.py
hook-six.py
文件来解决这个问题,每个文件都包含以下代码对应分布:
from PyInstaller.utils.hooks import copy_metadata, collect_data_files
datas = copy_metadata('pytz')
datas += collect_data_files('pytz')
使用 pyinstaller 构建应用程序时,我会调用 --additional-hooks-dir=
但是,现在相同的过程不适用于 pytz-deprecation-shim,因为我总是收到相同的错误。我该如何解决这个问题?我已经尝试将所有这些软件包升级到最新版本,但它们似乎是最新的。
版本: pytz 2021.3, pytz-deprecation-shim 0.1.0.post0, tzlocal 4.1, 六个 1.16.0, APScheduler 3.8.1
【问题讨论】:
APScheduler 版本为 3.8.1 【参考方案1】:我今天也遇到了这个问题。
我的解决方案是使用 APScheduler 3.6.3。
这是我的hook-apscheduler.py
datas = copy_metadata('apscheduler', recursive=True)
hiddenimports = collect_submodules('apscheduler')
【讨论】:
嗨,谢谢它对我有用。但是,您如何处理 tzdata 问题。如果不将代码 --collect-all tzdata 粘贴到我的 pyinstaller 命令中,程序将再次崩溃。如果我这样做,一切正常,但.exe 显然总是使用我的设备拥有的时区,但如果我分发它,则不是所有其他用户之一。有什么解决办法吗? 首先,命令-collect-all tzdata 与创建hook-tzdata.py 效果相同。二、推荐使用--additional-hooks-dir命令指定文件夹中的多个包,类似于hook-tzdata.py,因为这样可以指定多个包,而--collect all只能指定一个包.三、如何指定时区,可以这样: 从 tzlocal 导入 get_localzone local_tz = get_localzone() scheduler = BackgroundScheduler(timezone=local_tz)以上是关于使用 pyinstaller 构建 exe 时未找到 APScheduler pytz-deprecation-shim的主要内容,如果未能解决你的问题,请参考以下文章
PyInstaller 构建的 Windows EXE 因多处理而失败