为什么 mod_wsgi 可以针对 Python 2.7.3 进行编译但使用 2.7.2 运行时?

为什么 mod_wsgi 可以针对 Python 2.7.3 进行编译但使用 2.7.2 运行时?

以下是我的错误日志中出现的内容:

[Sat Nov 17 23:13:14 2012] [warn] mod_wsgi: Compiled for Python/2.7.3.
[Sat Nov 17 23:13:14 2012] [warn] mod_wsgi: Runtime using Python/2.7.2.

如果我检查我的 $PATH 变量,即使在 /etc/paths 中,/usr/local/bin(包含 Python 2.7.3)也位于 /usr/bin(包含 Python 2.7.2)之前。

我是否错过了其他路径?如何才能使用正确的运行时?

答案1

我能够确定使用旧运行时的原因。

快速修复方法是将 /usr/bin/python(最初为 2.7.2)符号链接到 /usr/local/bin/python,其中较新版本的 Python 使 /usr/bin/python 也为 2.7.3。重新启动 Apache 后,使用的是 2.7.3,这意味着 /usr 以某种方式被使用而不是 /usr/local。但是,我不想坚持使用此解决方案,所以我删除了符号链接。

经过进一步挖掘,我查看了 apachectl 脚本,并确定它正在从 /usr/sbin/envvars 加载 Apache 的环境变量

我修改了 envvars 文件的以下行以包含 /usr/local/lib,然后重新启动了 Apache。它加载了 Python 2.7.3(从而解决了我在使用 Django 时遇到的 _uname 问题,该问题是由 2.7.2/2.7.3 差异引起的)

DYLD_LIBRARY_PATH="/usr/local/lib:/usr/lib:$DYLD_LIBRARY_PATH"

相关内容