ImportError:无法从“ celery.bin.base”导入名称“ Command” Docker示例中的花替代品

问题描述

当我运行命令时

flower -A main --port=5555

花不起作用,错误是:

> ImportError: cannot import name 'Command' from 'celery.bin.base'

有什么想法吗?主要是Django项目

解决方法

花总是落后于Celery,因此,如果您使用最新的Celery(它们重构了CLI),则可能会失败。坚持4.4.x,直到Flower追上来。

,

如果您希望避免降低Celery工人的等级,一种解决方法是将主要版本的Celery单独运行早期版本的Flower。例如,在Docker容器中。 Flower只是监视您的经纪人,并且可以与您的Celery工人完全独立地运行。

Docker示例中的花

对于您的Django / Celery安装,运行Celery normally(无花):

celery -A main worker

对于Flower,请使用docker image mher/flower:0.9.5,其内部使用Celery 4.4.6,并且为reported working

以下是示例docker run命令:

docker run --name flower -p 5555:5555 mher/flower:0.9.5 flower --broker=redis://redis-address

注意:您必须将代理地址更改为代理的dns可解析名称或ip。对于rabbitmq,请使用--broker=amqp://guest@rabbitmq-address:5672//。有关高级选项,请参见url documentation

一旦运行,Flower应该可以在Docker主机的IP:5555上获得

您也可以创建一个docker-compose文件,将run命令中的所有参数封装起来,然后使用docker-compose up -d

替代品

如果愿意,您还可以使用pip install flower redis celery==4.4.7在不使用Docker 的情况下完成所有操作,只要它与主要Celery安装分开即可,然后使用{{1} }。一个单独的venv可能适用于此。

有关原始错误的将来更新,请参见github issue

,

在 celery 5.0.5 上工作时遇到同样的问题,所以切换到 celery 4.4.7 版本和花 0.9.7 并且它工作了。