导入错误:无法从“celery.bin.base”导入名称“Command”

ped*_*dev 16 python celery flower

当我运行命令时

flower -A main --port=5555
Run Code Online (Sandbox Code Playgroud)

花不工作,错误是:

> ImportError: cannot import name 'Command' from 'celery.bin.base'
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?Main 是一个 Django 项目

Dej*_*kic 23

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


cam*_*ech 15

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

Docker 示例中的花

对于你的 Django/Celery 安装,正常运行 Celery (没有 Flower):

celery -A main worker
Run Code Online (Sandbox Code Playgroud)

对于 Flower,请使用 docker image mher/flower:0.9.5,它内部使用 Celery 4.4.6,并报告有效

这是一个示例docker run命令:

docker run --name flower -p 5555:5555 mher/flower:0.9.5 flower --broker=redis://redis-address
Run Code Online (Sandbox Code Playgroud)

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

运行后,Flower 应该在 Docker 主机的 IP:5555 上可用

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

备择方案

如果愿意,您也可以在没有 Docker 的情况下完成所有这些,使用pip install flower redis celery==4.4.7,只要它与您的主要 Celery 安装分开,然后使用flower --broker=redis://redis-address. 一个单独的 venv 可能适用于此。

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