我在CentOS上,尝试配置Apache以使用针对Anaconda Python 3.5编译的mod_wsgi.编译mod_wsgi似乎可以:sudo yum install httpd-develsudo ./configure --with-python=/opt/anaconda/anaconda3/bin/pythonsudo makels ...

我在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安装.
解决方法:
这意味着在运行时找不到库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指令.
编辑:
我做了一些实验,当在PATH上找不到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目录…
作为参考,可以找到为什么需要这样做的扩展说明here
本文标题为:linux-无法加载为Python 3编译的mod_wsgi


基础教程推荐
- 无法使用Chrome和Firefox在Linux Mint上运行Selenium Python脚本 2023-11-11
- Windows下安装Anaconda+Python 2023-09-03
- CentOS 7 安装ovirt-engine-sdk-python 3.6.7.0 2023-09-03
- matplotlib中plt.hist()参数解释及应用实例 2022-08-30
- python – 我如何sudo当前进程? 2023-11-16
- 如果任何一个进程在python中找到匹配项,如何让所有pool.apply_async进程停止 2023-11-15
- OpenCV-Python图像轮廓之轮廓特征详解 2023-08-08
- 在centos6.4下安装python3.5 2023-09-04
- Python3 三种进程创建方法 2023-09-03
- python脚本删除n天前文件可用于windows,linux并且支持跨平台 2023-09-03