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

Ubuntu Server上Django5+mod_wsgi部署遇ModuleNotFoundError求助

Ubuntu Server下Django+mod_wsgi部署的ModuleNotFoundError解决方法

问题根源

你的Apache配置中同时加载了针对Python3.8和Python3.12编译的两个mod_wsgi模块,而Apache进程只能加载一个mod_wsgi实例——后加载的模块会被前一个覆盖,导致新项目的mod_wsgi配置失效,实际使用的是现有项目绑定的Python3.8环境。这一点从WSGI日志可以明确验证:虽然指定了新项目虚拟环境的Python路径,但实际运行的是系统默认的Python3.8,且sys.path中完全没有包含虚拟环境的site-packages目录,自然找不到仅安装在Python3.12虚拟环境里的Django。

解决步骤

1. 清理冲突的mod_wsgi加载指令

删除两个项目Apache配置文件中的LoadModule wsgi_module ...行——同一个Apache实例无法同时兼容两个不同Python版本的mod_wsgi模块。

2. 创建独立Apache实例(推荐生产环境)

Ubuntu下可以通过多实例配置实现不同Python版本的隔离:

  • 复制默认Apache配置文件,为每个Python版本创建独立配置:
    sudo cp /etc/apache2/apache2.conf /etc/apache2/apache2-py38.conf
    sudo cp /etc/apache2/apache2.conf /etc/apache2/apache2-py312.conf
    
  • 编辑apache2-py38.conf,添加Python3.8对应的mod_wsgi加载指令:
    LoadModule wsgi_module "/var/www/existing-project/venv/lib/python3.8/site-packages/mod_wsgi/server/mod_wsgi.cpython-38-x86_64-linux-gnu.so"
    
  • 编辑apache2-py312.conf,添加Python3.12对应的mod_wsgi加载指令:
    LoadModule wsgi_module "/var/www/new-project/venv/lib/python3.12/site-packages/mod_wsgi/server/mod_wsgi-py312.cpython-312-x86_64-linux-gnu.so"
    
  • 创建独立的站点配置目录:
    sudo mkdir -p /etc/apache2/sites-available-py38 /etc/apache2/sites-enabled-py38
    sudo mkdir -p /etc/apache2/sites-available-py312 /etc/apache2/sites-enabled-py312
    
  • 迁移并启用对应项目的虚拟主机配置:
    # 处理现有项目(Python3.8)
    sudo mv /etc/apache2/sites-available/existing-project.conf /etc/apache2/sites-available-py38/
    sudo ln -s /etc/apache2/sites-available-py38/existing-project.conf /etc/apache2/sites-enabled-py38/
    
    # 处理新项目(Python3.12)
    sudo mv /etc/apache2/sites-available/new-project.conf /etc/apache2/sites-available-py312/
    sudo ln -s /etc/apache2/sites-available-py312/new-project.conf /etc/apache2/sites-enabled-py312/
    
  • 修改虚拟主机端口避免冲突:比如将新项目的<VirtualHost *:80>改为<VirtualHost *:8080>,或为两个实例分配不同IP。
  • 启动/重启对应实例:
    # 启动Python3.8实例
    sudo apache2ctl -f /etc/apache2/apache2-py38.conf restart
    
    # 启动Python3.12实例
    sudo apache2ctl -f /etc/apache2/apache2-py312.conf restart
    

3. 验证新项目的WSGI配置

确保新项目的WSGIDaemonProcess配置正确指向虚拟环境:

WSGIDaemonProcess new-project python-home=/var/www/new-project/venv python-path=/var/www/new-project/project
WSGIProcessGroup new-project
WSGIScriptAlias / /var/www/new-project/project/project/wsgi.py

4. 临时测试方案(mod_wsgi-express)

如果需要快速验证项目本身是否正常,可以用mod_wsgi-express直接启动:

cd /var/www/new-project/project
source venv/bin/activate
mod_wsgi-express start-server project/wsgi.py --port 8080

访问http://new-project.com:8080即可确认Django是否能正常加载。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 14:35:58