导入错误:没有名为django.core.wsgi的模块(Ubuntu)

3

我正在遵循这个指南配置Apache以运行我的Django Web应用程序: https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/modwsgi/#basic-configuration

我已经安装了Djangomod_wsgi-express(新的方式)和mod_wsgi for apache,在一个Ubuntu 15.10服务器上使用以下命令:

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呢?


你检查过这些链接吗? https://dev59.com/yGYq5IYBdhLWcg3wzDhI https://dev59.com/imUp5IYBdhLWcg3w8LF4 - Iman Mirzadeh
是的,我阅读了这两篇文章,但它们并没有描述您实际上需要更改包含Django和Web应用程序的文件夹的权限。我只找到了一篇提到这一点的参考文章,请参见我的更新问题。 - u123
1
欢迎来到Stack Overflow。如果您的解决方案是问题的答案,请创建一个真正的答案,并提供足够的解释为什么它有效。SO会在超时后让您选择解决方案。请不要将解决方案放在问题中,因为这不是问题的目的。此外,请不要在更改时添加“编辑:”或“更新:”标签到问题/答案中。我们可以看到已经被修订的内容。相反,将信息添加到最初应该添加的位置。 - the Tin Man
3个回答

3
基于:http://www.webforefront.com/django/setupapachewebserverwsgi.html,运行Apache的 www-data 用户必须对包含Django安装的文件夹有读取权限。我刚刚进行了一个测试,将Django安装和Web应用程序复制到了/var/www/test,并更改了该文件夹的权限:
sudo chgrp -R www-data /var/www/test
sudo chmod -R g+rwx /var/www/test

应用程序现在已经加载。


chmod g+rwx不仅授予读取权限,而且还授予组www-data的所有权限(包括写入)...这不是不安全吗? - Javier Novoa C.

3
我刚刚在尝试按照这篇教程设置我的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

这让我很困惑,因为当我在虚拟环境中输入Python shell并导入模块时,它完美地工作了。
但是,我找到了这篇教程对于解决这个错误非常有用:https://gist.github.com/evildmp/3094281
uwsgi --http :8000 --module project.wsgi --virtualenv /path/to/virtualenv

在命令行中输入虚拟环境的路径,可以使WSGI找到缺失的模块。

您可以通过在命令提示符/终端中键入$ECHO virtualenv来查找虚拟环境的路径。


0

我遇到了同样的问题。

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

通过卸载系统中的gunicorn,然后激活我的虚拟环境,并使用pip install gunicorn将gunicorn安装到虚拟环境中来解决了这个问题。然后它立即就可以工作了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接