python - 编辑 wsgi.py 不能修复错误,ImportError: No module named django.core.wsgi
问题描述
我和这里有同样的问题:
ImportError:没有名为 django.core.wsgi 的模块 Apache + VirtualEnv + AWS + WSGI
但解决方案对我不起作用。
我实际上复制了这里提供的更精致的例子:
https://pseudoscripter.wordpress.com/2015/10/23/import-error-no-module-named-django-core-wsgi/
我完全搞砸了之前的 EC2 实例,所以我决定创建一个新的 EC2 实例并重新开始。
我运行一些命令来设置服务器:
yum upgrade -y
yum update -y
yum search python3 | grep devel
yum install python3-pip.noarch -y
yum install emacs -y
yum install make automake gcc gcc-c++ kernel-devel -y
yum install git -y
yum install nginx -y
yum install postgresql-devel -y
yum install libtiff-devel libjpeg-devel libzip-devel freetype-devel lcms2-devel libwebp-devel tcl-devel libxslt-devel libxml2-devel -y
yum install openssl-devel -y
yum install python-virtualenv.noarch
amazon-linux-extras install nginx1.12
然后我做了一些设置 Nginx 的工作:
如何在亚马逊 linux disto 上安装 nginx 1.9.15
sudo chmod 755 /etc/rc.d/init.d/nginx
sudo service nginx start
sudo chkconfig nginx on
然后我曾经scp
将我们的 Django 应用程序复制到此路径:
/usr/share/lynette-ecomerce-demo
然后,作为普通 EC2 用户,ec2-user
我运行:
source bin/activate
pip install Django
pip install gunicorn
如果我运行python
然后这个:
>>> import sys
>>> print(sys.prefix)
/usr/share/lynette-ecomerce-demo/ecommerce-site/version1/django
我没有使用pip3
,因为这似乎是上次造成所有问题的原因。但现在我这样做了:
gunicorn ecommerce.wsgi:application --bind 0.0.0.0:8000
我收到“ImportError: No module named django.core.wsgi”错误,所以我按照其他地方给出的建议打开了这个文件:
ecommerce/wsgi.py
我像这样编辑它:
"""
WSGI config for ecommerce project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/2.1/howto/deployment/wsgi/
"""
import os
import sys
sys.path.append("/usr/share/lynette-ecomerce-demo/ecommerce-site/version1/django/lib/python2.7/site-packages")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ecommerce.settings")
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'ecommerce.settings')
application = get_wsgi_application()
但现在如果我这样做:
gunicorn ecommerce.wsgi:application --bind 0.0.0.0:8000
我仍然得到这个:
[2018-08-21 15:09:27 +0000] [18310] [INFO] Starting gunicorn 19.9.0
[2018-08-21 15:09:27 +0000] [18310] [INFO] Listening at: http://0.0.0.0:8000 (18310)
[2018-08-21 15:09:27 +0000] [18310] [INFO] Using worker: sync
[2018-08-21 15:09:27 +0000] [18314] [INFO] Booting worker with pid: 18314
[2018-08-21 15:09:27 +0000] [18314] [ERROR] Exception in worker process
Traceback (most recent call last):
File "/usr/share/lynette-ecomerce-demo/ecommerce-site/version1/django/lib/python2.7/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
worker.init_process()
File "/usr/share/lynette-ecomerce-demo/ecommerce-site/version1/django/lib/python2.7/site-packages/gunicorn/workers/base.py", line 129, in init_process
self.load_wsgi()
File "/usr/share/lynette-ecomerce-demo/ecommerce-site/version1/django/lib/python2.7/site-packages/gunicorn/workers/base.py", line 138, in load_wsgi
self.wsgi = self.app.wsgi()
File "/usr/share/lynette-ecomerce-demo/ecommerce-site/version1/django/lib/python2.7/site-packages/gunicorn/app/base.py", line 67, in wsgi
self.callable = self.load()
File "/usr/share/lynette-ecomerce-demo/ecommerce-site/version1/django/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load
return self.load_wsgiapp()
File "/usr/share/lynette-ecomerce-demo/ecommerce-site/version1/django/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp
return util.import_app(self.app_uri)
File "/usr/share/lynette-ecomerce-demo/ecommerce-site/version1/django/lib/python2.7/site-packages/gunicorn/util.py", line 350, in import_app
__import__(module)
File "/usr/share/lynette-ecomerce-demo/ecommerce-site/version1/django/ecommerce/wsgi.py", line 17, in <module>
from django.core.wsgi import get_wsgi_application
ImportError: No module named django.core.wsgi
有什么建议么?
如果我这样做:
pip list
我懂了:
gunicorn (19.9.0)
http (0.02)
pip (1.4.1)
setuptools (0.9.8)
wsgiref (0.1.2)
我可以尝试添加到 PYTHONPATH:
--pythonpath /usr/share/lynette-ecomerce-demo/ecommerce-site/version1/lib/python3.7/site-packages
所以完整的命令是:
gunicorn ecommerce.wsgi:application --bind 0.0.0.0:8000 --pythonpath /usr/share/lynette-ecomerce-demo/ecommerce-site/version1/lib/python3.7/site-packages
当我尝试时,我得到:
[2018-08-21 16:26:27 +0000] [18604] [INFO] Starting gunicorn 19.9.0
[2018-08-21 16:26:27 +0000] [18604] [INFO] Listening at: http://0.0.0.0:8000 (18604)
[2018-08-21 16:26:27 +0000] [18604] [INFO] Using worker: sync
[2018-08-21 16:26:27 +0000] [18608] [INFO] Booting worker with pid: 18608
[2018-08-21 16:26:27 +0000] [18608] [ERROR] Exception in worker process
Traceback (most recent call last):
File "/usr/share/lynette-ecomerce-demo/ecommerce-site/version1/django/lib/python2.7/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
worker.init_process()
File "/usr/share/lynette-ecomerce-demo/ecommerce-site/version1/django/lib/python2.7/site-packages/gunicorn/workers/base.py", line 129, in init_process
self.load_wsgi()
File "/usr/share/lynette-ecomerce-demo/ecommerce-site/version1/django/lib/python2.7/site-packages/gunicorn/workers/base.py", line 138, in load_wsgi
self.wsgi = self.app.wsgi()
File "/usr/share/lynette-ecomerce-demo/ecommerce-site/version1/django/lib/python2.7/site-packages/gunicorn/app/base.py", line 67, in wsgi
self.callable = self.load()
File "/usr/share/lynette-ecomerce-demo/ecommerce-site/version1/django/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load
return self.load_wsgiapp()
File "/usr/share/lynette-ecomerce-demo/ecommerce-site/version1/django/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp
return util.import_app(self.app_uri)
File "/usr/share/lynette-ecomerce-demo/ecommerce-site/version1/django/lib/python2.7/site-packages/gunicorn/util.py", line 350, in import_app
__import__(module)
File "/usr/share/lynette-ecomerce-demo/ecommerce-site/version1/django/ecommerce/wsgi.py", line 17, in <module>
from django.core.wsgi import get_wsgi_application
File "/usr/share/lynette-ecomerce-demo/ecommerce-site/version1/lib/python3.7/site-packages/django/__init__.py", line 1, in <module>
from django.utils.version import get_version
File "/usr/share/lynette-ecomerce-demo/ecommerce-site/version1/lib/python3.7/site-packages/django/utils/version.py", line 71, in <module>
@functools.lru_cache()
AttributeError: 'module' object has no attribute 'lru_cache'
[2018-08-21 16:26:27 +0000] [18608] [INFO] Worker exiting (pid: 18608)
[2018-08-21 16:26:27 +0000] [18604] [INFO] Shutting down: Master
[2018-08-21 16:26:27 +0000] [18604] [INFO] Reason: Worker failed to boot.
如果我这样做:
find . -name site-packages
我懂了:
./django/lib/python2.7/site-packages
./django/lib64/python2.7/site-packages
./lib/python3.7/site-packages
解决方案
推荐阅读
- microsoft-graph-api - 使用 MS Graph SDK 检索聊天信息和与会者
- python - 在包创建期间安装在 /usr/local/lib/ 的共享库,而在包安装期间安装站点包
- javascript - 在orientationchange之后,clientWidth和innerWidth在iOS Chrome上没有更新
- c++ - 如何使用 RTN_FindByName 查找函数?
- python - 在 Sklearn 中使用 make_column_transformer 的问题
- c# - Xamarin 形式的儿童无法评估
- java - 如何编写向某个变量添加值的方法?爪哇
- python - 即使我正在创建 OpenGL 4.1 上下文,为什么在 PyOpenGL 中使用 glGenVertexArrays() 时会出现“无效操作错误”?
- javascript - 如何将 Sapper 添加到现有的 Svelte 项目中?
- d3.js - D3.JS 刻度方法在使用日期的 x 轴上不起作用