ImportError:没有名为django.core.wsgi(ubuntu)

时间:2016-03-26 11:23:21

标签: python django apache ubuntu importerror

我按照本指南为我的django Web应用程序配置apache: https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/modwsgi/#basic-configuration

我使用以下命令在ubuntu 15.10服务器上安装了Djangomod_wsgi-express方式)和mod_wsgi for apache

pip install Django
pip install mod_wsgi
sudo aptitude install libapache2-mod-wsgi

接下来我将以下内容添加到: /etc/apache2/apache2.conf

WSGIScriptAlias / /home/user/mysite/mysite/wsgi.py
WSGIPythonPath /home/user/mysite:/home/user/.local/lib/python2.7/site-packages

<Directory /home/user/mysite/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

但是当我启动apache时,我得到以下错误:

[Sat Mar 26 12:10:06.876025 2016] [wsgi:error] [pid 10622:tid 139806697674496] [client 217.40.250.17:52124]     from django.core.wsgi import get_wsgi_application
[Sat Mar 26 12:10:06.876057 2016] [wsgi:error] [pid 10622:tid 139806697674496] [client 217.40.250.17:52124] ImportError: No module named django.core.wsgi

但该模块确实存在于我在 WSGIPythonPath 上面提供的路径中:

~/.local/lib/python2.7/site-packages/django/core $ cat wsgi.py
import django
from django.core.handlers.wsgi import WSGIHandler

~/.local/lib/python2.7/site-packages $ ll
total 24
drwx------  6 user user 4096 Mar 24 22:25 ./
drwx------  3 user user 4096 Mar 20 20:56 ../
drwxrwxr-x 17 user user 4096 Mar 24 22:25 django/
drwxrwxr-x  2 user user 4096 Mar 24 22:25 Django-1.9.4.dist-info/
drwxrwxr-x  5 user user 4096 Mar 20 20:59 mod_wsgi/
drwxrwxr-x  2 user user 4096 Mar 20 20:59 mod_wsgi-4.4.22.egg-info/

我还尝试验证mod_wsgi模块构建的python版本:

 /usr/lib/apache2/modules $ ldd mod_wsgi.so
    linux-vdso.so.1 =>  (0x00007ffe50f31000)
    libpython2.7.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0 (0x00007f376fbc2000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f376f9a4000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f376f5d9000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f376f3bf000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f376f1bb000)
    libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f376efb7000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f376ecaf000)
    /lib64/ld-linux-x86-64.so.2 (0x00005609838b3000)

所以看起来它是针对Python 2.7的构建,它与正在安装Django的版本相同。

那为什么apache无法加载我的应用程序/ django?

3 个答案:

答案 0 :(得分:2)

基于: http://www.webforefront.com/django/setupapachewebserverwsgi.html

www-data 用户(运行apache文件夹的用户)必须具有对包含django安装的文件夹的读取权限。我刚做了一个测试,我将django安装和我的Web应用程序复制到: / var / www / test 并更改了该文件夹的权限:

sudo chgrp -R www-data /var/www/test
sudo chmod -R g+rwx /var/www/test

现在加载应用程序。

答案 1 :(得分:1)

当我根据本教程尝试设置我的Django,Nginx和WSGI时,我刚刚收到此错误:https://uwsgi.readthedocs.io/en/latest/tutorials/Django_and_nginx.html

当我输入命令时:uwsgi --http :8000 --module mysite.wsgi

我收到错误:

  

来自django.core.wsgi import get_wsgi_application ImportError:没有   名为django.core.wsgi的模块

对我来说没有任何意义,因为当我在virtualenv中输入python shell并导入模块时,它完美无缺。

但是,我发现本教程有助于消除错误:https://gist.github.com/evildmp/3094281

uwsgi --http :8000 --module project.wsgi --virtualenv /path/to/virtualenv

键入virtualenv的路径会导致WSGI找到它缺少的模块。

您可以在命令提示符/终端中输入$ECHO virtualenv来找到virtualenv的路径。

答案 2 :(得分:0)

我有同样的问题。

原因是我通过apt安装了gunicorn,然后在系统范围内的Python 2安装中运行,而不是在venv中运行。

通过卸载系统gunicorn,然后激活我的venv,并使用pip install gunicorn将venicorn安装到venv来解决此问题。然后它立即起作用。