You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

mod_wsgi切换Daemon模式报No module named 'django'错误解决方案

问题根因

切换mod_wsgi守护进程模式触发ImportError: No module named 'django',核心是两个配置/编译层面的错误:

  • 最初配置时WSGIDaemonProcess的python-home参数传值错误:该参数要求填写Python环境(系统安装/虚拟环境)的根目录,你填的/opt/python39/bin/python3.9是可执行文件路径,完全不符合参数规则。
  • 就算把路径修正为/opt/python39,之前手动全局编译的mod_wsgi没有绑定Python3.9的运行时库路径,守护进程启动时会默认加载系统自带Python的环境,自然读不到你装在Python3.9下的Django包。
  • 最开始用嵌入式模式能正常运行,是因为该模式下mod_wsgi直接运行在Apache主进程中,全局WSGIPythonHome配置直接生效,不会触发路径隔离问题;但守护进程是独立fork的子进程,严格依赖编译时写入的rpath查找依赖库,路径不匹配必然加载错误环境。
实测可用的解决流程

按照mod_wsgi维护者推荐的虚拟环境方案部署,可以彻底规避路径匹配问题,步骤如下:

  • 用/opt/python39/下的Python3.9为项目创建独立虚拟环境,激活进入该虚拟环境
  • 虚拟环境激活状态下,通过pip install安装Django及所有项目依赖的第三方包
  • 同环境下执行pip install mod-wsgi安装对应版本的mod_wsgi
  • 下载和已安装mod-wsgi版本一致的源码包,执行tar解压后进入源码目录
  • 执行配置命令:./configure --with-python=python3,注意此处的python3必须指向你自行安装的Python3.9,不能用CentOS7预装的Python3.6
  • 执行编译命令,指定虚拟环境库路径避免运行时加载错依赖:make LDFLAGS='-L/你的虚拟环境实际路径/lib -Wl,-rpath,/你的虚拟环境实际路径/lib'
  • 编译完成后执行sudo make install完成mod_wsgi安装
  • 保持虚拟环境激活状态,执行mod_wsgi-express module-config,将命令输出的LoadModule相关配置完整复制到Apache站点配置文件的最顶部
  • 执行deactivate退出虚拟环境
  • 修改站点配置:删除全局的WSGIPythonHome、WSGIPythonPath指令,在WSGIDaemonProcess配置中把python-home改为刚创建的虚拟环境根目录,python-path指向Django项目根目录,同时在WSGIScriptAlias配置末尾补上process-group=你的进程组名 application-group=%{GLOBAL}参数
  • 执行sudo apachectl restart重启Apache即可正常访问,不会再出现找不到Django模块的报错。

注意:守护进程模式下不要保留WSGIPythonHome、WSGIPythonPath两个全局配置,这两个指令仅对嵌入式模式生效,残留配置会干扰守护进程的环境变量加载,反而触发新的问题。

内容的提问来源于stack exchange,提问作者Shmack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 10:21:19