当前位置: 首页 > news >正文

cx_Freeze python 打包 APScheduler 定时任务异常问题解决

异常信息:

 File "D:\Programs\Python\Python312\Lib\site-packages\apscheduler\schedulers\base.py", line 1105, in _create_plugin_instanceplugin_cls = class_container[alias]~~~~~~~~~~~~~~~^^^^^^^
KeyError: 'interval'During handling of the above exception, another exception occurred:Traceback (most recent call last):File "FlaskKspiceServer.py", line 496, in startServiceFile "D:\Programs\Python\Python312\Lib\site-packages\apscheduler\schedulers\base.py", line 486, in add_job"trigger": self._create_trigger(trigger, trigger_args),^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "D:\Programs\Python\Python312\Lib\site-packages\apscheduler\schedulers\base.py", line 1132, in _create_triggerreturn self._create_plugin_instance("trigger", trigger, trigger_args)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "D:\Programs\Python\Python312\Lib\site-packages\apscheduler\schedulers\base.py", line 1108, in _create_plugin_instanceplugin_cls = class_container[alias] = plugin_container[alias].load()^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "D:\Programs\Python\Python312\Lib\importlib\metadata\__init__.py", line 205, in loadmodule = import_module(match.group('module'))^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "D:\Programs\Python\Python312\Lib\importlib\__init__.py", line 90, in import_modulereturn _bootstrap._gcd_import(name[level:], package, level)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "<frozen importlib._bootstrap>", line 1387, in _gcd_importFile "<frozen importlib._bootstrap>", line 1360, in _find_and_loadFile "<frozen importlib._bootstrap>", line 1324, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'apscheduler.triggers.interval'Traceback (most recent call last):File "D:\Programs\Python\Python312\Lib\site-packages\apscheduler\schedulers\base.py", line 1105, in _create_plugin_instanceplugin_cls = class_container[alias]~~~~~~~~~~~~~~~^^^^^^^
KeyError: 'interval'During handling of the above exception, another exception occurred:Traceback (most recent call last):File "FlaskKspiceServer.py", line 496, in startServiceFile "D:\Programs\Python\Python312\Lib\site-packages\apscheduler\schedulers\base.py", line 486, in add_job"trigger": self._create_trigger(trigger, trigger_args),^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "D:\Programs\Python\Python312\Lib\site-packages\apscheduler\schedulers\base.py", line 1132, in _create_triggerreturn self._create_plugin_instance("trigger", trigger, trigger_args)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "D:\Programs\Python\Python312\Lib\site-packages\apscheduler\schedulers\base.py", line 1108, in _create_plugin_instanceplugin_cls = class_container[alias] = plugin_container[alias].load()^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "D:\Programs\Python\Python312\Lib\importlib\metadata\__init__.py", line 205, in loadmodule = import_module(match.group('module'))^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "D:\Programs\Python\Python312\Lib\importlib\__init__.py", line 90, in import_modulereturn _bootstrap._gcd_import(name[level:], package, level)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "<frozen importlib._bootstrap>", line 1387, in _gcd_importFile "<frozen importlib._bootstrap>", line 1360, in _find_and_loadFile "<frozen importlib._bootstrap>", line 1324, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'apscheduler.triggers.interval'During handling of the above exception, another exception occurred:Traceback (most recent call last):File "D:\Programs\Python\Python312\Lib\site-packages\cx_Freeze\initscripts\__startup__.py", line 121, in runmodule_init.run(f"__main__{name}")File "D:\Programs\Python\Python312\Lib\site-packages\cx_Freeze\initscripts\console.py", line 25, in runexec(code, main_globals)File "FlaskKspiceServer.py", line 563, in <module>File "FlaskKspiceServer.py", line 519, in startServiceFile "D:\Programs\Python\Python312\Lib\site-packages\apscheduler\schedulers\background.py", line 40, in shutdownsuper().shutdown(*args, **kwargs)File "D:\Programs\Python\Python312\Lib\site-packages\apscheduler\schedulers\blocking.py", line 22, in shutdownsuper().shutdown(wait)File "D:\Programs\Python\Python312\Lib\site-packages\apscheduler\schedulers\base.py", line 232, in shutdownraise SchedulerNotRunningError
apscheduler.schedulers.SchedulerNotRunningError: Scheduler is not running

原因分析

APScheduler 的触发器(trigger)是通过动态导入的,打包工具不会自动识别这些“隐式依赖”,所以需要手动指定。


解决方法

1. PyInstaller 解决方案

方法一:在代码中显式导入

在你的主程序(如 FlaskKspiceServer.py)开头加上:

python

# 显式导入所有用到的 triggerimport apscheduler.triggers.intervalimport apscheduler.triggers.cronimport apscheduler.triggers.date

这样 PyInstaller/cx_Freeze 就会自动把这些模块打包进去。

方法二:PyInstaller 的 hiddenimports

如果用 PyInstaller,可以加参数:

sh

pyinstaller --hidden-import=apscheduler.triggers.interval --hidden-import=apscheduler.triggers.cron --hidden-import=apscheduler.triggers.date your_script.py


2. cx_Freeze 解决方案

在 setup.py 的 build_exe_options 里加:

python

此种办法解决成功!此种办法解决成功!此种办法解决成功!

build_exe_options = {"packages": ["apscheduler.triggers.interval", "apscheduler.triggers.cron", "apscheduler.triggers.date"],# ... 其他配置 ...}


3. 确认 APScheduler 版本

  • APScheduler 4.x/3.x 都有类似问题,解决方法一样。
  • 建议用最新版 APScheduler。

4. 关于 SchedulerNotRunningError

这个报错是因为前面触发器加载失败,导致 scheduler 没有启动,后续 shutdown 时自然报错。只要解决了 trigger 的导入问题,这个报错也会消失。


总结

最简单的做法:在你的主程序开头加如下代码:

python

import apscheduler.triggers.intervalimport apscheduler.triggers.cronimport apscheduler.triggers.date

然后重新打包即可。

http://www.lryc.cn/news/597747.html

相关文章:

  • AI入门学习-Python 最主流的机器学习库Scikit-learn
  • C++11扩展 --- 并发支持库(中)
  • MST技术加持,简化桌面多屏布局
  • 力扣(LeetCode) ——轮转数组(C语言)
  • 第一层nginx访问url如何透传到第二层nginx
  • 【SQLServer】Microsoft SQL Server远程版本信息泄漏
  • Java学习---Spring及其衍生(上)
  • 分布式限流算法与组件
  • Android模块化实现方案深度分析
  • 【读代码】李沐团队开源音频大模型 Higgs Audio V2
  • 二、计算机网络技术——第4章:网络层
  • 4️⃣字典(dict)速查表
  • 三大论坛联动,2025合成生物学盛会助力生物制造高质量发展
  • 半导体 CIM(计算机集成制造)系统
  • Hexo - 免费搭建个人博客02 - 创建个人博客
  • 智能办公如何创建e9流程
  • ubuntu24的一些小问题
  • Spring事务注解详解:确保你的应用数据的一致性
  • Python Day22 - 复习日
  • Python-Pytorch编码习惯
  • C++ BFS实例:从入门到实战
  • 设计模式 八:原型模式 (Prototype Pattern)
  • java设计模式 -【装饰器模式】
  • AI营销核心技术解析:运作机制与行业应用实例
  • 在模拟器上实现 GRE 实验
  • HCIP一二章笔记
  • 动态路由协议基础
  • HF86611_VB1/HF86611Q_VB1:多通道USB HiFi音频解码器固件技术解析
  • 0基础法考随手笔记 02(刑诉法专题04 辩护与代理)
  • 音视频中一些常见的知识点