无法使用Python 2.7重新编译mod_wsgi
我发现重新编译 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 个回答
从源代码重新构建mod_wsgi,这次在运行'configure'的时候加上'--disable-framework'这个选项。
对于Snow Leopard系统,单独的Python安装包有时候在链接Python作为框架时会出现问题。所以你需要关闭这种链接方式,改用更传统的库链接方式。这样做之后,otool应该能显示出正确的Python版本,使用起来就没问题了。
你不能用WSGIPythonHome强制它使用不同的版本。