Linux Can';t加载为Python 3编译的mod_wsgi

Linux Can';t加载为Python 3编译的mod_wsgi,linux,apache,mod-wsgi,python-3.5,Linux,Apache,Mod Wsgi,Python 3.5,我在CentOS上,试图将Apache配置为使用针对Anaconda Python 3.5编译的mod_wsgi。编译mod_wsgi似乎进展顺利: sudo yum install httpd-devel sudo ./configure --with-python=/opt/anaconda/anaconda3/bin/python sudo make ls -l /etc/httpd/modules/mod_wsgi.so -rwxr-xr-x. 1 root root 702205 M

我在CentOS上,试图将Apache配置为使用针对Anaconda Python 3.5编译的mod_wsgi。编译mod_wsgi似乎进展顺利:

sudo yum install httpd-devel
sudo ./configure --with-python=/opt/anaconda/anaconda3/bin/python
sudo make

ls -l /etc/httpd/modules/mod_wsgi.so
-rwxr-xr-x. 1 root root 702205 Mar  2 23:12 /etc/httpd/modules/mod_wsgi.so
但当我启动web服务器时,它似乎找不到它的库:

sudo service httpd start
Starting httpd: httpd: Syntax error on line 221 of /etc/httpd/conf/httpd.conf:
Syntax error on line 1 of /etc/httpd/conf.d/wsgi.conf: Cannot load
/etc/httpd/modules/mod_wsgi.so into server: libpython3.5m.so.1.0: cannot
open shared object file: No such file or directory
libpython3.5m.so.1.0
肯定在
/opt/anaconda/anaconda3/lib
中,所以我想
mod_wsgi.so
模块不知道在哪里查找它。然而mod_wsgi
config.status
似乎证实了这一点

S["LDFLAGS"]=" -L/opt/anaconda/anaconda3/lib -L/opt/anaconda/anaconda3/lib/python3.5/config-3.5m "
所以我不知所措。。。谁能给我指出正确的方向吗

编辑:好的,多亏了@mata,我想我已经根据正确的库编译了mod_wsgi。但现在服务器日志中只会充满相同的重复消息:

Current thread 0x00007f60d68d07e0 (most recent call first):
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ImportError: No module named 'encodings'

所以我想(从我在其他线程上读到的内容来看),我已经告诉它在哪里查找我的Python安装。

这意味着库
libpython3.5m.so.1.0
在运行时找不到,因为目录
/opt/anaconda/anaconda3/lib
不是动态链接器查找它的地方

您可以尝试使用以下方法重建mod_wsgi:

./configure LDFLAGS='-Wl,-rpath=/opt/anaconda/anaconda3/lib' --with-python=/opt/anaconda/anaconda3/bin/python
这将在生成的二进制文件中保存库路径

另一个选项是为apache进程设置
LD\u LIBRARY\u PATH
环境变量,这不是一个好方法。
或者使用/etc/ld.so.conf.d/中的conf文件将目录/opt/anaconda/anaconda3/lib添加到库搜索路径,这将是一个全局设置。有关更多信息,请参阅

另外,不要忘记在配置文件中正确设置
WSGIPythonHome
指令


编辑:

我已经做了一些实验,当
路径上找不到
python3
二进制文件时,我可以重现您的第二条错误消息
在这种情况下,设置
WSGIPythonHome
指令似乎是不够的,您需要在apache启动之前设置
PYTHONHOME
环境变量,或者更改
PATH
,以便找到解释器。在CentOS上更改
/etc/sysconfig/httpd
就可以了,只需添加:

export PYTHONHOME=/opt/anaconda/anaconda3
# alternatively this should also work:
export PATH="$PATH:/opt/anaconda/anaconda3/bin"
或者在路径上的目录中创建指向解释器的符号链接,例如
/usr/local/bin


作为参考,可以在下面找到一个扩展的解释,解释为什么需要它

谢谢——我认为它现在可以根据正确的库进行编译了。。。但我仍然有(相关的)问题,让它工作:看我的编辑。你是不是很清楚出了什么问题?@xnx-试图回答你的新问题,希望能有帮助。谢谢你——一定是这样!我仍然有一些权限问题需要解决,但我想我可以从这里开始解决。我相信你的回答也会对其他人有用。
export PYTHONHOME=/opt/anaconda/anaconda3
# alternatively this should also work:
export PATH="$PATH:/opt/anaconda/anaconda3/bin"