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

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

当我运行命令

flower -A main --port=5555

Flower 不起作用,错误是:

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

有什么想法吗? Main 是一个 Django 项目

Flower 总是落后于 Celery,所以如果你使用最新的 Celery(他们重构了 CLI)它可能会失败。坚持 4。4.x 直到 Flower 赶上。

如果您希望避免降级您的 Celery worker,一个解决方法是 运行 将以前版本的 Flower 与您的主要 Celery 安装分开。例如,在一个容器或单独的 venv 中。 Flower 仅监控您的经纪人,并且可以 运行 与您的 Celery worker 完全分开。

Docker例子中的花

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

celery -A main worker

对于花,使用 docker image mher/flower:0.9.5, which internally uses Celery 4.4.6, and is reported working.

这是一个示例 docker run 命令:

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

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

运行 之后,Docker 主机上的 IP:5555

应该可以使用 Flower

您也可以创建一个 docker-compose 文件来封装 运行 命令中的所有参数,并使用 docker-compose up -d.

备选方案

如果愿意,您也可以 不使用 Docker,使用 pip install flower redis celery==4.4.7,只要它与您的主要 Celery 安装分开,然后 运行 与 flower --broker=redis://redis-address 开花。单独的 venv 可能适用于此。

有关原始错误的未来更新,请参阅 github issue

在使用 celery 5.0.5 时遇到同样的问题,所以切换到 celery 4.4.7 版本和 flower 0.9.7 并且它有效。

您可以按照很多人的建议降级 Celery,或者像我一样,将 flower 升级到最新版本,自 2021 年 7 月以来现在是 1.0.0 -> https://pypi.org/project/flower/.

我可以确认最后一个版本与 celery[auth,redis,tblib]==5.1.2 兼容。

我个人建议您尝试升级包而不是降级它们,升级 flower 比降级 celery 更不容易破坏您的项目。

也许你可以试试pip install https://github.com/mher/flower/zipball/master#egg=flower