【问题标题】:No module named celery using python 3.6 and apache2没有使用 python 3.6 和 apache2 命名为 celery 的模块
【发布时间】:2026-01-31 16:05:01
【问题描述】:

在我的开发机器上,我在一个 django 应用程序中安装和配置了 celery,它使用 python3.5 和 django dev webserver 可以正常工作。

当我将该应用程序部署到我的生产服务器时,我收到一个错误“没有名为 celery 的模块”。在生产服务器上运行带有 apache2 和 mod_wsgi 的 python3.6。

在两台机器上,我在 virtualenv 中使用 django-1.11 和 celery-4.1.0。我怀疑这是 python3.6 或 mod_wsgi 的问题。

我还没有找到任何真正解决我的问题的方法,所以我在这里试试运气:)

干杯 迈克尔

【问题讨论】:

  • 你能说明在这两种情况下你是如何安装它的吗?
  • 你是说芹菜?在 virtualenv 中:pip install celery。其他一切都已经在运行,celery 是唯一新添加的模块/包
  • 你使用 python3.6 - 你确定你有pip pip3 的别名吗? (对不起,我不是 Python 开发者,不知道 virtualenv 是如何工作的)
  • Virtualenv 负责 pip 版本,在这种情况下 pip3 与 python3.6 一起使用

标签: python django celery


【解决方案1】:
  1. 作为健全性检查,请确保 celery 实际安装在您使用的虚拟环境中。
  2. 如果您使用带有 mod_wsgi 的虚拟环境,您可能需要在 WSGIDaemonProcess 指令中设置 python-home=<path_to_your_virtual_env>

例子:

WSGIDaemonProcess django python-path=/opt/portal/src/python-home=/opt/venv/django home=/opt/portal/

如果python-path中需要多个目录,可以使用逗号分隔的列表

【讨论】:

  • 正如我提到的 django 应用程序之前运行没有任何问题,只有 celery 不工作。
  • celery 不工作的一个可能原因是它安装在一个虚拟环境中,而 Apache 使用的是不同的虚拟环境或系统 python。不看配置就无法判断,但是否有可能您在系统解释器中也安装了 Django,并且 mod_wsgi 正在使用它?
  • 只有一个 virtualenv 并且 celery 只安装在其中。 Apache 指向那个 virtualenv。例如,我还安装了 restframework,它适用于 apache。
【解决方案2】:

所以,我想通了。显然,我的 virtualenv 指向另一个目录,而不是 apache 正在使用的那个目录。不知道这是怎么发生的。无论如何,在删除并重新创建 virtualenv 之后它就可以工作了。

感谢您的帮助!

【讨论】:

    最近更新 更多