【问题标题】:Celery and pyinstaller芹菜和pyinstaller
【发布时间】:2021-08-24 16:15:19
【问题描述】:

我想要一个 Celery Worker(以 Redis 作为代理和后端),它将接收来自多个远程 Celery 生产者的任务(通过使用“.send_task”)。

我正在尝试使用 pyinstaller 将生产者端打包到单个 *.exe 中。这个想法是运行 *.exe,它将向远程 Celery 工作人员发送任务。

这是“生产者”代码:

from celery import Celery

def main():
    print('Sending Task')
    #celery_app.send_task('add',args=(2,2))
    celery=Celery('redis://:password@redis_server:6379')
    celery.send_task('tasks.add',(2,2))


if __name__=="__main__":
    main()

然后我使用 pyinstaller 将代码编译成单个文件。不幸的是,我在尝试运行可执行文件时遇到了异常。我收到以下错误:

Sending Task
Traceback (most recent call last):
  File "sendtask.py", line 11, in <module>
  File "sendtask.py", line 6, in main
  File "celery\app\base.py", line 291, in __init__
  File "celery\app\base.py", line 291, in <listcomp>
  File "kombu\utils\imports.py", line 56, in symbol_by_name
  File "importlib\__init__.py", line 127, in import_module
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 961, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 973, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'celery.fixups'
[5588] Failed to execute script 'sendtask' due to unhandled exception!
  • Python v.3.8.10-64
  • Pyinstaller v. 4.5.1

有人知道是否可以将 python 脚本编译为可执行文件,将任务发送到远程 Celery 工作人员?

任何帮助将不胜感激

谢谢 何塞

【问题讨论】:

    标签: python redis celery celery-task


    【解决方案1】:

    我在使用 pyinstaller==4.8、celery==5.2.3 和 python 3.9.7 时遇到了同样的问题。

    在我的项目中,我通过在 pyinstaller 命令行上添加明确的 hidden-import 要求来解决。

    pyinstaller.exe --hidden-import celery.fixups --hidden-import celery.fixups.django myprogram.py
    

    我猜这是由于 Pyinstaller 的依赖分析不当造成的,在使用此类工具部署项目时,手动显式某些部门似乎很常见。

    【讨论】:

      猜你喜欢
      • 2012-05-01
      • 2020-08-25
      • 2018-12-07
      • 2015-01-10
      • 2014-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-24
      相关资源
      最近更新 更多