使用Red Hat,apache 2.4.6,worker mpm,mod_wsgi 4.6.5和Python 3.7启动httpd时,出现上述错误,并且:
ModuleNotFoundError: No module named 'encodings'
在httpd error_log中。
我正在使用从主目录下的源安装的python创建的python虚拟环境。我使用--with-python=
选项从源代码安装了mod_wsgi,该选项指向我的虚拟环境中的python二进制文件,然后将mod_wsgi.so文件复制为mod_wsgi37.so到我的apache模块目录中。
我对该文件运行了ldd,并有一个.conf文件,将其像这样加载到httpd中:
LoadFile /home/myUser/pythonbuild/lib/libpython3.7m.so.1.0
LoadModule wsgi_module modules/mod_wsgi37.so
然后在我的VirtualHost中,我拥有:
WSGIDaemonProcess wsgi group=www threads=12 processes=2 python-path=/var/
www/wsgi-scripts python-home=/var/www/wsgi-scripts/wsgi_env3
WSGIProcessGroup wsgi
WSGIScriptAlias /test /var/www/wsgi-scripts/test.py
在我的虚拟环境中:
sys.prefix:'/var/www/wsgi-scripts/wsgi_env3'
sys.real_prefix:'/home/myUser/pythonbuild'
当我切换到系统安装的mod_wsgi / python组合(从WSGIDaemonProcess删除python-home行,并更改.conf文件以加载原始的mod_wsgi.so)时,它工作正常。似乎某些路径变量未正确设置。还有另一种设置我所缺少的变量如PYTHONHOME的方法吗?如何修复我的安装?
答案 0 :(得分:0)
最近我遇到这个问题时,发现了一个可以在我的环境中使用的解决方案。
我不在虚拟环境中工作,但是在我的主文件夹中安装了非标准的python安装程序(没有root访问权限即可编译和安装)-这应该类似于虚拟环境。
我的虚拟主机配置的结构如下:
WSGIPythonHome /home/myuser/usr/
<VirtualHost *:80>
...
WSGIDaemonProcess wsgi home=/path/to/my/project/folder processes=10 threads=10
WSGIScriptAlias / /path/to/my/project/folder/wsgi.py
WSGIProcessGroup wsgi
</VirtualHost>
首先,我完全省略了python-path。此外,WSGIPythonHome应该使用Python库指向bin/
,lib/
和include/
目录的父文件夹。
我犯了一个错误,将其指向bin/
文件夹。
因此,即使我通过WSGIPythonPath
手动将默认库添加到python路径中,WSGI也无法加载默认库。
答案 1 :(得分:0)
我遇到了一个非常相似的问题,我发现我手动指定的 wsgi.*
被忽略了,因为之前的 apache-wide wsgi mod 正在加载。您可以检查 /etc/apache2/mods-enabled
中是否存在 a2dismod wsgi
。
如果是这种情况,请考虑使用 billing_day
禁用加载错误 python 的 apache wsgi。