繁体   English   中英

导入错误:没有名为 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 服务器上为 apache安装了Djangomod_wsgi-express方法)和mod_wsgi

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 构建的,而 Python 2.7 与安装 Django 的版本相同。

那么为什么 apache 无法加载我的应用程序/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 来修复它。 然后它立即起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM