我在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'
所以我猜测apache正在寻找python库的错误位置。 00-wsgi.conf
文件给出了所有麻烦:
WSGIPythonHome /opt/anaconda/anaconda3
WSGIPythonPath /opt/anaconda/anaconda3/lib/python3.5/site-packages
LoadModule wsgi_module modules/mod_wsgi.so
所以我想(从我在其他线程上读过的内容)我已经告诉它在哪里寻找我的Python安装。
答案 0 :(得分:1)
这意味着无法在运行时找到库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_LIBRARY_PATH
环境变量,这不是一个好方法。
或者使用/etc/ld.so.conf.d/中的conf文件将目录/ opt / anaconda / anaconda3 / lib添加到库搜索路径,这将是一个艰难的全局设置。有关详细信息,请参阅man ld-linux
。
另外,不要忘记在配置文件中正确设置WSGIPythonHome
指令。
编辑:
我已经完成了一些实验,当python3
上找不到PATH
二进制文件时,我可以重现您的第二条错误消息。
在这种情况下似乎设置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
...
作为参考,可以找到here