ImportError: No module named django.core.wsgi (ubuntu)

ImportError: No module named django.core.wsgi (ubuntu)

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

我已经在 ubuntu 15.10 服务器上安装了 Django, mod_wsgi-express (the new way) and 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/

我还尝试验证 python 的版本 mod_wsgi 模块是针对以下内容构建的:

 /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 无法加载我的 application/django?

基于: 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

应用程序现在加载。

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

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

我收到错误:

from django.core.wsgi import get_wsgi_application ImportError: No module named 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 的路径。

我遇到了同样的问题。

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

通过卸载系统 gunicorn,然后激活我的 venv,并使用 pip install gunicorn 将 gunicorn 安装到 venv 来修复它。然后它立即工作。