ImportError:没有安装django.core.handlers.wsgi的模块django mod_wsgi config apache

我试图安装Django的工作与Apache和mod_wsgi但得到这个错误:

ImportError: No module named django.core.handlers.wsgi, 

我读过这可能是用户错误…

在控制台(ssh)上,使用root权限,访问django.core.handlers.wsgi时没有任何问题,但是当apache要求访问它时,不能

我的django.wsgi:

 import os import sys sys.path.append('my/rep/parents/of/my/project') sys.path.append('/usr/lib/python2.4/site-packages/django') os.environ['DJANGO_SETTINGS_MODULE'] = 'montest.settings' os.environ['PYTHON_EGG_CACHE'] = '/tmp' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler() 

我的vhost.conf:

 Alias /media/ my/rep/parents/of/my/projet/montest/media/ <Directory my/rep/parents/of/my/projet/montest/media> Order deny,allow Allow from all </Directory> WSGIScriptAlias /montest my/rep/parents/of/my/projet/django.wsgi <Directory my/rep/parents/of/my/projet> Order deny,allow Allow from all </Directory> 

编辑:

好的我的结果ldd mod_wsgi.so

 linux-gate.so.1 => (0x0013c000) libpython2.6.so.1.0 => /usr/lib/libpython2.6.so.1.0 (0x00663000) libpthread.so.0 => /lib/libpthread.so.0 (0x00bff000) libdl.so.2 => /lib/libdl.so.2 (0x0023b000) libutil.so.1 => /lib/libutil.so.1 (0x00420000) libm.so.6 => /lib/libm.so.6 (0x00110000) libc.so.6 => /lib/libc.so.6 (0x00240000) /lib/ld-linux.so.2 (0x0059f000) 

所以我决定用test.wsgitesting我的mod_wsgi安装

test.wsgi

 def application(environ, start_response): status = '200 OK' output = 'Hello world, I am a wsgi app!' response_headers = [('Content-Type', 'text/plain'), ('Content-Length', str(len(output)))] start_response(status, response_headers) return [output] 

我的vhost.conf:

 WSGIScriptAlias /test /var/www/vhosts/mydomain.fr/subdomains/django/httpdocs/test.wsgi <Directory /var/www/vhosts/mydomain.fr/subdomains/django/httpdocs> Order allow,deny Allow from all Options +ExecCGI </Directory> 

现在工作…接下来,我将尝试我的django.wsgiconfiguration

我通过添加站点包的位置解决了这个问题,我把django子目录(/Library/python/2.7/site-packages)保存到WSGIDaemonProcess中:

 WSGIDaemonProcess www.example.com processes=2 threads=15 display-name=%{GROUP} python-path=/Library/python/2.7/site-packages 

如果您在httpd.conf中使用嵌入式服务器模式:

 WSGIPythonPath /Library/python/2.7/site-packages 

为什么你甚至试图将网站包目录添加到sys.path? 如果你的mod_wsgi是针对Python 2.4编译的,那么它应该已经在site-packages目录中了。 听起来像你的mod_wsgi甚至没有编译对Python 2.4。

跑:

 ldd mod_wsgi.so 

对付你安装的mod_wsgi.so文件,找出它编译的Python版本,并发布结果。

我以前有过这个问题,这是因为Apache / mod_wsgi进程没有读取模块的权限。 您可以使您的site-packages / django目录具有世界可读性,或添加其他适当的用户/组权限。

错误:

 WSGIDaemonProcess www.example.com python-path=~/virtualenvs/virt1/lib/python2.7 

对:

 WSGIDaemonProcess www.example.com python-path=/home/user/virtualenvs/virt1/lib/python2.7 

我花了太多时间试图弄清楚为什么我的virtualenv没有正确加载django。

我通过添加将django安装到wsgi.py的sys.path中的父目录来解决这个问题。 这是我的设置,FWIW:

/home/banjer/myproject/wsgi.py

 import os, sys sys.path.append('/home/banjer/django') sys.path.append('/home/banjer') # this line solved it sys.executable = '/usr/local/python-2.7.2/bin/python' os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler() 

检查您的网站包文件的权限。 上述解决方案都没有为我工作,直到我修复文件权限。 以下是我的ssl_error_log文件中的内容:

 mod_wsgi (pid=986, process='OSQA', application='xxxxxx.yyy.com|/forum'): Loading WSGI script '/data/http/osqa/osqa.wsgi'. mod_wsgi (pid=986): Target WSGI script '/data/http/osqa/osqa.wsgi' cannot be loaded as Python module. mod_wsgi (pid=986): Exception occurred processing WSGI script '/data/http/osqa/osqa.wsgi'. Traceback (most recent call last): File "/data/http/osqa/osqa.wsgi", line 14, in <module> import django.core.handlers.wsgi ImportError: No module named django.core.handlers.wsgi 

但我解决了我的服务器上。 如果您可以在命令行上执行此操作,则此解决方案适用于您:

 python >>> import django.core.handlers.wsgi >>> 

什么工作是我chmod去+ rx网站包libpython * (这可能是矫枉过正,但它为我工作。)

我以apache.user的身份运行httpd,以root身份运行python,可以看到这些软件包很好,但是我的权限没有正确设置(由所有人阅读),这就是为什么httpd无法读取软件包。

这一行当然是错误的:

 sys.path.append('/usr/lib/python2.4/site-packages/django') 

使用/来安装Django是为了构建mod_wsgi所针对的Python版本。

我知道这是一个有点老的问题,但我想我会为将来的SO用户提供这样的问题:

你的mod_wsgi链接到python2.6,但是你使用python 2.4根据你的配置运行django?

我假定你的/ usr / bin / python指向的是2.6以外的东西,这是mod_wsgi编译的东西。 这也可能是因为你正在运行django而不是2.4。 当Django使用python2.7时,当我加载mod_wsgi链接到python2.6时,我收到了同样的错误。 使用我已经安装的mod_wsgi版本 – 它支持python2 [6-7],所以我所要做的就是删除/ usr / lib / apache2 / modules /中的符号链接,用于mod_wsgi.so – > mod_wsgi .so-2.6并将其更改为mod_wsgi.so – > mod_wsgi.so-2.7。

很简单。

如果你从旧的Python库中删除Django将是一个更好的主意。

 [root@lts5srv1]# rm -rf /root/epd-5.1.0/lib/python2.5/site-packages/django 

..并将其重新安装在当前使用的python的“site-packages”文件夹中:

 [root@lts5srv1 Django-1.4.1]# /usr/local/bin/python2.6 setup.py install 

这就是我所做的,我不知道这个错误了!

你好!

如果你使用Linux(Debian,Ubuntu等)的deb分发,编辑文件

 /etc/apache2/modules/wsgi.load 

这个文件包含正确的wsgi-library(对于活动版本的Python解释器)的路径。 如果你使用Python2.6,改变字符串

 Loadmodulee wsgi_module /usr/lib/apache2/modules/mod_wsgi.so-2.7 

 Loadmodulee wsgi_module /usr/lib/apache2/modules/mod_wsgi.so-2.6 

另外,您可以将软链接更改为mod_wsgi模块:

 cd /usr/lib/apache2/modules ln -s mod_wsgi.so-2.6 mod_wsgi.so 

不要忘了在/etc/apache2/modules/wsgi.load文件中更改链接并重新启动Apache服务器

 service apache2 restart 

PS抱歉我的英文不好