ImportError:没有名为django.core.wsgi的模块Apache + VirtualEnv + AWS + WSGI

时间:2013-02-17 23:25:48

标签: django apache amazon-ec2 wsgi django-wsgi

我正在尝试在亚马逊的EC2实例上发布我的网站,并且我一直收到500错误。我真的不知道为什么。

//日志文件

    [Sun Feb 17 23:12:48.066802 2013] mod_wsgi (pid=2102): Target WSGI script '/srv/www/app/poka/apache/wsgi.py' cannot be loaded as Python module.
    [Sun Feb 17 23:12:48.066840 2013] mod_wsgi (pid=2102): Exception occurred processing WSGI script '/srv/www/app/poka/apache/wsgi.py'.
    [Sun Feb 17 23:12:48.066864 2013] Traceback (most recent call last):
    [Sun Feb 17 23:12:48.066889 2013] File "/srv/www/mysite/poka/apache/wsgi.py", line 26, in <module>
    [Sun Feb 17 23:12:48.066920 2013] from django.core.wsgi import get_wsgi_application
    [Sun Feb 17 23:12:48.066945 2013] ImportError: No module named django.core.wsgi

// Apache配置文件

    WSGIScriptAlias / /srv/www/app/mysite/apache/wsgi.py

    WSGIDaemonProcess mysite python-path=/srv/www/app/mysite:/home/ec2-user/.virtualenvs/mysite-main/lib/python2.7/site-packages
    WSGIProcessGroup mysite

    <Directory /srv/www/app/mysite/apache/>
    <Files wsgi.py>
    Order deny,allow
    Allow from all
    </Files>
    </Directory>

    <Directory /srv/www/app/mysite/apache/>
    Order deny,allow
    Allow from all
    </Directory>

    <Directory /home/ec2-user/app/mysite/static>
    Order deny,allow
    Allow from all
    </Directory>

    <Directory /home/ec2-user/app/mysite/media>
    Order deny,allow
    Allow from all
    </Directory>

// wsgi.py

    import os
    import sys
    import site

    site.addsitedir('/home/ec2-user/.virtualenvs/mysite-main/lib/python2.7/site-packages')
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

    from django.core.wsgi import get_wsgi_application
    application = get_wsgi_application()

    path = '/srv/www/app/mysite'

    if path not in sys.path:
        sys.path.append(path)

12 个答案:

答案 0 :(得分:34)

我知道这是一个旧帖子,但我刚刚遇到同样的问题,我不认为这是由于缺少包裹造成的。由于Django核心发行版已包含正确的wsgi处理程序。

这里的问题是,当执行wsgi.py时,它会从你的virtualenv中遗漏网站包的包。 (如果你已经激活了你的virtualenv,并完成了pip install django,那么一切都很好。你有必要的django包。)

就我而言,我修复了在Path / to / Project / Project / wsgi.py文件中修改sys.path的问题。

您必须将项目目录和virtualenv站点包附加到sys.path列表中。 这是我的项目中包含的wsgi.py文件(谈论用django-admin.py start-project创建的wsgi.py)...我必须修改才能使它与Apache一起工作

# =====================
# wsgi.py file begin 

import os, sys
# add the hellodjango project path into the sys.path
sys.path.append('<PATH_TO_MY_DJANGO_PROJECT>/hellodjango')

# add the virtualenv site-packages path to the sys.path
sys.path.append('<PATH_TO_VIRTUALENV>/Lib/site-packages')

# poiting to the project settings
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "hellodjango.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

# wsgi.py file end
# ===================

确保:

  1. 您将mod_wsgi添加到Apache模块目录 必须为您拥有的操作系​​统,Apache和Python版本编译mod_wsgi

  2. 将load module命令添加到httpd.conf中以加载mod_wsgi模块 LoadModule wsgi_module modules / mod_wsgi.so

  3. 在httpd.conf中配置了Django细节,或者在httpd.conf中包含任何内容

  4. 基于文档How to use Django with Apache and mod_wsgi

    WSGIScriptAlias / <PATH_TO_PROJECT>/hellodjango/hellodjango/wsgi.py
    WSGIPythonPath <PATH_TO_PROJECT>:<PATH_TO_VIRTUALENV>/Lib/site-packages
    
    <Directory <PATH_TO_PROJECT>/hellodjango/hellodjango> 
      <Files wsgi.py>
        Order deny,allow
        Require all granted
      </Files>
    </Directory>
    

    希望这会有所帮助。它对我有用。

答案 1 :(得分:7)

将其添加到Apache配置文件中:

WSGIPythonHome /home/ec2-user/.virtualenvs/mysite-main

答案 2 :(得分:4)

对我来说,这表明Django没有安装在服务器上。通过

修复
pip install Django

答案 3 :(得分:2)

我刚才有类似的错误。事实证明我们的Django代码是在python 3.5上开发的,但由于某些原因,部署我们服务器的人使用python 2.7设置了virtualEnv。我们使用python 3.5重新部署,一切都为我们工作

以下是我收到的错误消息:

$ python serviceStartup.py 
Traceback (most recent call last):
  File "serviceStartup.py", line 10, in <module>
    from django.core.wsgi import get_wsgi_application
ImportError: No module named django.core.wsgi

希望这对任何看到类似错误消息的人都有帮助!

答案 4 :(得分:1)

您已经很好地配置了我的朋友,只需要授予apache用户访问项目和virtualenv dirs的权限。

示例:

sudo chown -R www-data:www-data /home/ubuntu/projects
sudo chown -R www-data:www-data /home/ubuntu/virtualenv

这解决了ImportError: No module named django.core.wsgi(virtualenvs文件夹)和ImportError: No module named <project-name>.settings(项目文件夹)的问题

答案 5 :(得分:1)

我有同样的问题。我的libapache2-mod-wsgi是python 2.x,而不是python 3.x

在这里找到解决方案:https://stackoverflow.com/a/28118284/2489042

@nima的积分

$ sudo apt-get remove libapache2-mod-python libapache2-mod-wsgi
$ sudo apt-get install libapache2-mod-wsgi-py3

在复制/粘贴以下命令之前,@ alxs发出警告: 如果在服务器上运行的使用wsgi和apache的python 2项目,上述命令将有效地将其关闭。

答案 6 :(得分:0)

乍一看,我很抱歉我的英语。我也遇到过这个问题,我通过将'wsgi.py'文件更改为:

来解决这个问题
import os
import django
from django.core.handlers.wsgi import WSGIHandler


os.environ.setdefault("DJANGO_SETTINGS_MODULE", "eisentask.settings.production")
django.setup(set_prefix=False)

application = WSGIHandler()

答案 7 :(得分:0)

我正在为项目使用Centos,nginx和gunicorn ... 我有这个问题 wsgi文件无法访问,可能是您当前目录的bcz 我更改了当前目录,它正常工作了... 我的项目名称是coda,所以我输入了

cd coda

然后

gunicorn --bind  0.0.0.0:8001 coda.wsgi

答案 8 :(得分:0)

万一有人使用AWS Lightsail bitnami来到这里。

问题是“ python将软件包安装在apache无法看到的目录中”。

so:软件包安装在“ /home/bitnami/.local/lib/python3.8/site-packages/”中,而Apache查找在“ /opt/bitnami/python/lib/python3.8/site-packages”中/'。

我遵循的临时解决方案是使用以下命令'cp -r /home/bitnami/.local/lib/python3.8/site-packages/* / opt / bitnami / python / lib /将软件包复制到Apache eyes文件夹python3.8 / site-packages /'

答案 9 :(得分:0)

嗨,我在 Ubuntu 20.04 服务器中遇到了同样的问题。我通过安装 apache2-dev

修复了它
sudo apt-get install apache2-dev

mod_wsgi documentation 中安装 apache2apache2-dev 很重要。

答案 10 :(得分:-1)

对我来说,需要设置一些变量(对于Windows):

set PYTHONHOME=F:\path\to\python
set PYTHONPATH=F:\path\to\python

答案 11 :(得分:-1)

确保您使用virtualenv中安装的uwsgi模块,例如:

/home/ubuntu/venv/bin/uwsgi --ht :8000 --module mysite.wsgi