ImportError:没有名为django.core.wsgi的模块Apache + VirtualEnv + AWS + 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 

// Apacheconfiguration文件

  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) 

我知道这是一个古老的线程,但我碰到了同样的问题,我不认为这是由一个丢失的包引起的。 由于Django核心发行版已经包含了正确的wsgi处理程序。

这里的问题是,当执行wsgi.py时,它会从你的virtualenv中丢失站点包的包。 (如果你已经激活了你的virtualenv,并且完成了pip安装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模块中。dir mod_wsgi必须针对操作系统,Apache和Python版本进行编译

  2. 在你的httpd.conf中加入load module命令加载mod_wsgi模块Loadmodulee wsgi_module modules / mod_wsgi.so

  3. 在你的httpd.conf中配置了Django特性,或者你在httpd.conf中包含的任何conf

基于文档如何使用Django与Apache和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> 

希望这可以帮助。 它为我工作。

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

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

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

 pip install Django 

你已经配置好了我的朋友,只需要给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 (项目文件夹)

我刚才也有类似的错误。 事实证明,我们的Django代码是在python 3.5上开发的,但由于某些原因,部署我们的服务器设置virtualEnv与python 2.7的人。 我们用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 

希望这将有助于任何人看到类似的错误信息!

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

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

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

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