无法使用Python 2.7重新编译mod_wsgi

1 投票
1 回答
1171 浏览
提问于 2025-04-17 23:04

我发现重新编译 mod_wsgi 以支持 Python 2.7 简直太难了。

我正在用 Flask 和 Flask-WTF 构建一个应用程序。这个应用在独立运行时没问题,但在 Apache 里就出错了,因为我 Mac 上的 Apache 服务器使用的是 Python 2.6,尽管我已经安装了 2.7,并且默认情况下 Python 应用是用 2.7 的。独立运行时是用的 2.7。

运行 which python 命令显示了这个:

/Library/Frameworks/Python.framework/Versions/2.7/bin/python

用 otool -L mod_wsgi.so 查看结果是这样的:

 mod_wsgi.so:       

    /System/Library/Frameworks/Python.framework/Versions/2.6/Python (compatibility version 2.6.0, current version 2.6.1)

所以我重新编译了:

./configure with-python=/Library/Frameworks/Python.framework/Versions/2.7/bin/python

用 otool -L mod_wsgi.so 查看,结果没有变化:

/System/Library/Frameworks/Python.framework/Versions/2.6/Python (兼容版本 2.6.0,当前版本 2.6.1)

重启后,Apache 还是在用 2.6,这一点通过 phpinfo() 和错误日志都能确认。phpinfo() 显示的 Apache 详情如下:

Apache/2.2.22 (Unix) DAV/2 mod_wsgi/3.4 Python/2.6.1 PHP/5.3.15 mod_ssl/2.2.22 OpenSSL/0.9.8r

它使用的模块在这个路径下:/Library/Python/2.6/site-packages/。在 /Library/Python 里没有 2.7 的目录。

我尝试在 httpd.conf 里调整 WSGIPythonHome 变量,但没有任何效果。

我还用 disable-framework 命令编译了 mod_wsgi,但问题依旧。

我需要在 Apache 配置中做什么其他的更改,以指向正确的 Python 版本吗?或者我需要在 mod_wsgi 配置中添加什么额外的内容吗?把我用的模块安装到 2.6 里是不行的。

我在 Mac OSX 10.6.8 上运行 Apache 2。

谢谢。


这是完整的解决方案。

cd <mod_wsgi source directory>

make distclean

./configure --with-python=/Library/Frameworks/Python.framework/Versions/2.7/bin/python --disable-framework

sudo make install

1 个回答

1

从源代码重新构建mod_wsgi,这次在运行'configure'的时候加上'--disable-framework'这个选项。

对于Snow Leopard系统,单独的Python安装包有时候在链接Python作为框架时会出现问题。所以你需要关闭这种链接方式,改用更传统的库链接方式。这样做之后,otool应该能显示出正确的Python版本,使用起来就没问题了。

你不能用WSGIPythonHome强制它使用不同的版本。

撰写回答