我正在尝试使用mod_wsgi的WSGIAuthUserScript指令实现Apache Basic Auth,我无法弄清楚如何指定python路径。我正在使用Django进行身份验证,如detailed here,我收到的错误如下:
Traceback (most recent call last):
File "/path-to-site/src/project/wsgi.py", line 21, in <module>
from django.contrib.auth.handlers.modwsgi import check_password
ImportError: No module named django.contrib.auth.handlers.modwsgi
我的WSGIDaemonProcess
指令使用python-path选项(指向virtualenv的site-packages)但似乎没有类似的WSGIAuthUserScript选项。我已经尝试过设置WSGIPythonPath,并为WSGIAuthUserScript设置应用程序组选项,但都没有帮助。
答案 0 :(得分:1)
WSGIPythonPath应该有效。那或者在WSGI脚本文件本身中设置sys.path。你在设置它是什么? django安装在哪里? Apache运行的用户是否具有读取权限,直到您安装它的位置?
答案 1 :(得分:0)
我有类似的问题,WSGIAuthUserScript不使用WSGIPythonPath或WSGIPythonHome也不使用进程组。 2个对我有用的解决方案:
解决方案1)在您的虚拟环境中编译mod_wsgi
# load your virtual environment
. bin/activate
# compiles AXXS needed by mod WSGI
pip install mod_wsgi-httpd
# Compile mod WSGI
pip install mod-wsgi
在Apache(CentOS&Co)中安装mod_wsgi模块
mod_wsgi-express install-module > /etc/httpd/conf.modules.d/25-wsgi.conf
在Apache(Debian&Co)中安装mod_wsgi模块
mod_wsgi-express install-module > /etc/apache2/mods-available/wsgi.conf
a2enmod wsgi
所有脚本现在都应该使用虚拟环境。
解决方案2)将venv加载到身份验证脚本中
python_home = "/myt_venv_path/"
sys.path.append(python_home)
# Needed by WSGIAuthUserScript
activate_this = python_home + '/bin/activate_this.py'
with open(activate_this) as venv:
exec(venv.read(), {'__file__': activate_this})