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

在Poetry虚拟环境安装mod-wsgi遇编译错误的技术问询

问题解决方案

一、先修正Apache调用错误Python版本的核心问题

Apache默认会使用系统自带的Python(这里是3.6),必须让它明确指向Poetry虚拟环境的Python3.10。但前提是先解决mod-wsgi的编译错误,步骤如下:

1. 先获取Poetry虚拟环境路径

进入项目根目录,执行命令拿到虚拟环境的绝对路径:

poetry env info --path

输出类似 /home/user/.cache/pypoetry/virtualenvs/django_manager-xxxx-py3.10,记下来后续要用。

二、解决mod-wsgi编译链接错误

你遇到的编译报错,是因为当前Python3.10编译时没有添加--enable-shared参数,生成的静态库无法用于构建mod-wsgi这类Apache共享模块。提供两种解决方式:

方式1:重新编译带--enable-shared的Python3.10(推荐)

如果系统里的Python3.10是手动源码编译的,按以下步骤重新安装:

  • 卸载现有Python3.10(源码安装的话,进入原源码目录执行 make uninstall)
  • 下载Python3.10源码包并解压,执行编译配置:
./configure --enable-shared --prefix=/usr/local/python3.10
make && make install
  • 配置动态链接库路径:编辑 /etc/ld.so.conf.d/python3.10.conf,添加一行:
/usr/local/python3.10/lib

然后执行生效命令:

ldconfig

重新编译后的Python会生成可用的共享库,之后安装mod-wsgi就不会再报链接错误。

方式2:用LD_RUN_PATH临时规避(无需重新编译)

如果不想重新编译Python,可在安装mod-wsgi前设置环境变量指定Python库路径:

  • 执行命令临时设置环境变量(路径对应错误日志里的/usr/local/lib):
export LD_RUN_PATH=/usr/local/lib
pip install mod-wsgi

这种方式稳定性不如重新编译,仅作为临时方案使用。

三、配置Apache指向Poetry虚拟环境

mod-wsgi安装完成后,配置Apache让它使用正确的Python环境:

  1. 获取mod-wsgi的模块配置信息,执行:
mod_wsgi-express module-config

会输出类似内容:

LoadModule wsgi_module "/usr/local/apache2/modules/mod_wsgi.so"
WSGIPythonHome "/usr/local/python3.10"

将这些内容添加到Apache的主配置文件(如httpd.conf)或虚拟主机配置文件中。

  1. 编辑虚拟主机配置,指定项目和虚拟环境路径:
<VirtualHost *:80>
    ServerName gamemanager.com
    DocumentRoot /var/www/html/GameManager

    # 替换为你的虚拟环境路径和项目路径
    WSGIDaemonProcess gamemanager python-path=/var/www/html/GameManager:/home/user/.cache/pypoetry/virtualenvs/django_manager-xxxx-py3.10/lib/python3.10/site-packages
    WSGIProcessGroup gamemanager
    WSGIScriptAlias / /var/www/html/GameManager/gamemanager/wsgi.py

    <Directory /var/www/html/GameManager/gamemanager>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>
</VirtualHost>

注意替换python-path中的虚拟环境路径为你之前获取的实际路径,末尾需加上/lib/python3.10/site-packages。

  1. 重启Apache服务使配置生效:
systemctl restart httpd

四、验证结果

  • 查看gamemanager.com-error.log,确认日志中不再出现Python3.6的路径
  • 访问gamemanager.com,检查Django应用是否正常运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:05:18