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 中安装apache2
和apache2-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 <project-name>.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:没有名为 websocket 的模块
ImportError:没有名为“backports”的模块