mod wsgi 选择了错误的 libpython2.7.so.1.0

mod wsgi 选择了错误的 libpython2.7.so.1.0

我已经使用以下命令编译了 python 2.7.8:

mkdir -p /usr/local/python2p7/lib
./configure --prefix=/usr/local/python2p7 --with-threads --enable-shared LDFLAGS="-Wl,-rpath /usr/local/python2p7/lib"
make
make install altinstall

我正在使用 LDFLAGS,因此此安装不会与内置有 python 2.7.5 的 CentOS 7 冲突。

我编译的modwsgi 4.2.6:

./configure --with-apxs=/usr/local/apache/bin/apxs --with-python=/usr/local/python2p7/bin/python LDFLAGS="-L/usr/local/python2p7/lib"
 make
 make install

如果我运行:

ldd /usr/local/apache/modules/mod_wsgi.so

我明白了

...
libpython2.7.so.1.0 => /lib64/libpython2.7.so.1.0 (0x00007f648d9a0000)
...

如何让 mod wsgi 使用 /usr/local/python2p7/lib/libpython2.7.so.1.0?

*******解决方案*******

在 Graham Dumpleton 的帮助下:

要编译 modwsgi:

export LD_RUN_PATH=/usr/local/python2p7/lib
./configure --with-apxs=/usr/local/apache/bin/apxs --with-python=/usr/local/python2p7/bin/python
make
make install
unset LD_RUN_PATH

在 apache 配置集中

WSGIPythonHome /usr/local/python2p7

我最初将其设置为“/usr/local/python2p7/bin”并出现“ImportError:没有名为 site 的模块”错误。

答案1

mod_wsgi 文档中介绍了这一点。请参阅:

在编译 mod_wsgi 时,您需要将 LD_RUN_PATH 环境变量设置为适当的库目录,以确保它使用正确的 Python 共享库。

另请阅读:

以防在运行时它仍然会拾取错误的运行时文件。在这种情况下,您还需要设置 WSGIPythonHome。

就从源代码编译而言,另一个原因是 CentOS 仍然附带旧的 mod_wsgi。

您甚至可以考虑使用 pip 安装的 mod_wsgi 来代替现在正在做的事情。请参阅:

相关内容