使用Celery时为何需用pip重装Poetry已安装的依赖?
问题根因
你遇到的是Celery运行时使用的Python解释器与Poetry创建的项目虚拟环境解释器不匹配问题,和Celery本身是否需要额外依赖无关:
- 你启动Django时调用的是项目虚拟环境内的Python解释器,能正常读取
pyproject.toml中安装的所有依赖包 - 你直接执行
celery命令时,实际调用的是系统全局路径下的Celery程序,对应全局Python环境,自然找不到你只在项目虚拟环境中安装的djangorestframework、psycopg2等依赖
验证方法
执行以下命令检查Celery的实际路径:
- Linux/macOS 执行:
which celery - Windows 执行:
where celery
如果输出路径不在你当前项目Poetry虚拟环境的bin(Windows对应Scripts)目录下,即可确认是上述问题。
正确解决方案
不要用pip额外全局安装依赖,避免破坏Poetry的依赖隔离逻辑,使用以下两种方式执行Celery命令即可:
- 先进入Poetry虚拟环境再启动Celery:
poetry shell celery -A backend worker -l info
- 直接通过
poetry run前缀调用虚拟环境内的Celery:
poetry run celery -A backend worker -l info
内容的提问来源于stack exchange,提问作者A.K.M. Adib
相关产品推荐
相关产品推荐

