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

Posted

技术标签:

【中文标题】ImportError:没有名为 django.core.wsgi 的模块 Apache + VirtualEnv + AWS + WSGI【英文标题】:ImportError: No module named django.core.wsgi Apache + VirtualEnv + AWS + WSGI 【发布时间】:2013-02-02 08:31:07 【问题描述】:

我正在尝试在 Amazon 的 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)

【问题讨论】:

***.com/a/45944655/110118 似乎相关 【参考方案1】:

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

sudo apt-get install apache2-dev

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

【讨论】:

【参考方案2】:

如果有人使用 AWS Lightsail bitnami 来到这里..

问题是'python 将包安装在 apache 看不到的目录中'。

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

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

【讨论】:

【参考方案3】:

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

cd coda

然后

gunicorn --bind  0.0.0.0:8001 coda.wsgi

【讨论】:

【参考方案4】:

我遇到了同样的问题。我的 libapache2-mod-wsgi 是 python 2.x 而不是 python 3.x

在这里找到解决方案:https://***.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 项目,上述命令将有效地关闭它们。

【讨论】:

点评来源: 嗨,虽然链接是分享知识的好方法,但如果它们将来被破坏,它们将不会真正回答问题。将回答问题的链接的基本内容添加到您的答案中。如果内容太复杂或太大而无法在此处放置,请描述所提出解决方案的总体思路。请记住始终保留指向原始解决方案网站的链接引用。见:How do I write a good answer?【参考方案5】:

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

导入操作系统 导入 django 从 django.core.handlers.wsgi 导入 WSGIHandler os.environ.setdefault("DJANGO_SETTINGS_MODULE", "eisentask.settings.production") django.setup(set_prefix=False) 应用程序 = WSGIHandler()

【讨论】:

【参考方案6】:

我刚才遇到了类似的错误。事实证明,我们的 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

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

【讨论】:

在 debian 中使用 libapache2-mod-wsgi 安装 WSGI 后出现此错误。使用 python 3 时,正确的包是 libapache2-mod-wsgi-py3【参考方案7】:

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

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

【讨论】:

【参考方案8】:

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

例子:

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(虚拟环境文件夹)和ImportError: No module named &lt;project-name&gt;.settings(项目文件夹)的问题

【讨论】:

【参考方案9】:

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

pip install Django

【讨论】:

这违背了使用 virtualenv 的目的。 通常没那么简单:考虑共享开发或登台服务器的示例,其中 django 项目的多个分支必须在各种虚拟主机上运行——每个虚拟主机都可以在虚拟环境中正常运行。 在 Amazon ec2 上遇到了同样的问题,在 Ubuntu 用户名下安装了 Django,但由于某种原因需要在 root 下安装它才能让 Apache2 拾取它。【参考方案10】:

我知道这是一个旧线程,但我刚刚遇到了同样的问题,我不认为这是由于缺少包引起的。由于 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
# ===================

确保:

    您已将 mod_wsgi 添加到 Apache 模块目录 mod_wsgi 必须针对您拥有的操作系​​统、Apache 和 Python 版本进行编译

    将加载模块命令添加到您的 httpd.conf 以加载 mod_wsgi 模块 LoadModule wsgi_module modules/mod_wsgi.so

    在您的 httpd.conf 或您在 httpd.conf 中包含的任何配置中配置 Django 细节

基于文档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>

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

【讨论】:

wsgi.py 更新似乎为我修复了它,除了我的 site-packages 有不同的路径(而不是在 lib 中使用大写 L):@987654326 @。你的路径可能不同,fx。如果你有不同的 python 版本,所以我建议检查一下。另外我不确定PATH_TO_PROJECT/hellodjango 是什么意思。它应该是 settings.py 所在的目录吗? 完美!!经过这么多回答说同样的话,即。 Django 没有安装在当前的 virtualenv 中,终于值得了 按照此查找站点包 - ***.com/questions/122327/…【参考方案11】:

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

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

【讨论】:

它没有成功......但是我做了一个“ldd mod_wsgi.so”,它指向 Python 2.6,但我的虚拟环境是 Python 2.7......

以上是关于ImportError:没有名为 django.core.wsgi 的模块 Apache + VirtualEnv + AWS + WSGI的主要内容,如果未能解决你的问题,请参考以下文章

ImportError:没有名为枚举的模块

ImportError:没有名为“appdirs”的模块

ImportError:没有名为 websocket 的模块

ImportError:没有名为“backports”的模块

ImportError:没有名为 ghostscript 的模块

ImportError:运行火花时没有名为请求的模块