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

Ubuntu18.04下Apache2无法加载Python3.8虚拟环境 调用Python3.6报错

问题根因

Ubuntu 18.04 apt源提供的libapache2-mod-wsgi-py3是针对系统默认Python3.6编译的。mod_wsgi没有跨Python大版本兼容能力,编译时绑定的Python版本必须和项目运行的Python版本完全一致,因此配置文件中指定的Python3.8虚拟环境不会生效,Apache始终调用Python3.6环境加载项目,自然无法识别虚拟环境内安装的Django、项目自身的业务模块。
另外原有虚拟主机配置的WSGIDaemonProcess参数中,python-path未加入项目根目录,即使Python版本匹配,也会出现找不到warehouse模块的问题。

解决步骤
  • 卸载apt安装的不兼容mod_wsgi模块,避免版本冲突
sudo apt remove -y libapache2-mod-wsgi-py3
  • 安装编译依赖,用于生成匹配Python3.8的mod_wsgi模块
sudo apt install -y apache2-dev python3.8-dev
  • 进入项目目录,激活Python3.8虚拟环境,通过pip安装对应版本的mod_wsgi,该方式安装的模块会自动绑定当前虚拟环境的Python3.8版本
cd /home/tealy/warehouse
source venv/bin/activate
pip install mod-wsgi
  • 执行命令获取mod_wsgi的Apache加载配置,将输出的内容完整记录
mod_wsgi-express module-config

输出示例:

LoadModule wsgi_module "/home/tealy/warehouse/venv/lib/python3.8/site-packages/mod_wsgi/server/mod_wsgi-py38.cpython-38-x86_64-linux-gnu.so"
WSGIPythonHome "/home/tealy/warehouse/venv"
  • 写入模块加载配置,启用wsgi模块
# 将上一步输出的LoadModule行写入wsgi.load文件,注意替换成你自己实际执行输出的路径
echo "LoadModule wsgi_module \"/home/tealy/warehouse/venv/lib/python3.8/site-packages/mod_wsgi/server/mod_wsgi-py38.cpython-38-x86_64-linux-gnu.so\"" | sudo tee /etc/apache2/mods-available/wsgi.load
sudo a2enmod wsgi
  • 修改原有Apache虚拟主机配置,替换WSGIDaemonProcess行,将项目根目录加入Python搜索路径,修正后的配置段参考:
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        Alias /static /home/tealy/warehouse/static
        <Directory /home/tealy/warehouse/static>
                Require all granted
        </Directory>

        <Directory /home/tealy/warehouse/warehouse>
                <Files wsgi.py>
                        Require all granted
                </Files>
        </Directory>

        WSGIScriptAlias / /home/tealy/warehouse/warehouse/wsgi.py
        # 注意python-path最前面新增了项目根目录路径
        WSGIDaemonProcess django_app python-path=/home/tealy/warehouse:/home/tealy/warehouse/venv/lib/python3.8/site-packages python-home=/home/tealy/warehouse/venv
        WSGIProcessGroup django_app
</VirtualHost>
  • 校验Apache配置语法,确认无误后重启服务
sudo apache2ctl configtest
# 输出Syntax OK即可执行重启
sudo systemctl restart apache2
验证

重启后查看Apache运行日志,启动信息中会显示mod_wsgi/xxx Python/3.8 configured,此时访问站点即可正常加载Django应用,不会再出现模块找不到的报错。

注意:后续如果更换项目使用的Python大版本,必须重新编译安装对应版本的mod_wsgi,否则会再次出现版本不匹配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:48:19