-
ImportError: No module named 'MySQLdb'컴퓨터 공부 ver 0.1/Django 2016. 7. 7. 14:24반응형
포트폴리오 사이트를 AWS의 Beanstalk을 이용해 올려 놓았는데, 이번에 MySQL 사용하는 페이지를 넣으면서 아래 로그와 같은 문제가 생겨서 아주 담담하게(뭔가 기능을 추가하면 항상 있는 일인지라) 고쳐 나갔습니다.
제 사이트 환경은 이렇습니다.
- Python: 3.4.1
- Django: 1.9.5
- MySQL: 5.6.27
포트폴리오 페이지 중에 MySQL에 데이터 읽고 쓰는 부분이 있어 기능 추가하고 당당하게 Deploy 하고 실행!!! 역시나!!raceback (most recent call last):
File "/opt/python/run/venv/lib64/python3.4/site-packages/django/core/handlers/wsgi.py", line 165, in __call__
signals.request_started.send(sender=self.__class__, environ=environ)
File "/opt/python/run/venv/lib64/python3.4/site-packages/django/dispatch/dispatcher.py", line 192, in send
response = receiver(signal=self, sender=sender, **named)
File "/opt/python/run/venv/lib64/python3.4/site-packages/django/db/__init__.py", line 55, in reset_queries
for conn in connections.all():
File "/opt/python/run/venv/lib64/python3.4/site-packages/django/db/utils.py", line 227, in all
return [self[alias] for alias in self]
File "/opt/python/run/venv/lib64/python3.4/site-packages/django/db/utils.py", line 227, in <listcomp>
return [self[alias] for alias in self]
File "/opt/python/run/venv/lib64/python3.4/site-packages/django/db/utils.py", line 212, in __getitem__
backend = load_backend(db['ENGINE'])
File "/opt/python/run/venv/lib64/python3.4/site-packages/django/db/utils.py", line 116, in load_backend
return import_module('%s.base' % backend_name)
File "/opt/python/run/baselinenv/lib64/python3.4/importlib/__init__.py", line 109, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked
File "<frozen importlib._bootstrap>", line 1129, in _exec
File "<frozen importlib._bootstrap>", line 1471, in exec_module
File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
File "/opt/python/run/venv/lib64/python3.4/site-packages/django/db/backends/mysql/base.py", line 28, in <module>
raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named 'MySQLdb'
mod_wsgi (pid=11837): Exception occurred processing WSGI script '/opt/python/current/app/fromleaf.mypage/fromleaf/wsgi.py'.
Traceback (most recent call last):
File "/opt/python/run/venv/lib64/python3.4/site-packages/django/db/backends/mysql/base.py", line 25, in <module>
import MySQLdb as Database
ImportError: No module named 'MySQLdb'안되더군요.
Stackoverflow랑 인터넷에 널부러져 있는 블로그들 내용 뒤지면서 겨우 찾은 해결책이
/opt/python/run/venv/lib64/python3.4/site-packages/django/db/backends/mysql/base.py 코드에 아래와 같이 추가하여 MySQLdb 클래스를 변경해야 되더라구요.
[ 아래 코드를 추가 ]
try:
import pymysql
pymysql.install_as_MySQLdb()
except ImportError:
from django.core.exceptions import ImproperlyConfigured
raise ImproperlyConfigured("Error loading pymysql module: %s" % e)
try:
import MySQLdb as Database
except ImportError as e:
from django.core.exceptions import ImproperlyConfigured
raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)
왜 그런지 찾아보니 MySQLdb가 Python3에서는 지원을 안해서 그렇다는군요. 대신에 mysqlclient를 쓰도록 Django 공식 페이지에 나와있더라구요.
그 내용은 아래 링크에서 보실 수 있고요.
https://docs.djangoproject.com/ja/1.9/ref/databases/#id8
혹시 해보시고 안되시면 메일이나 댓글 달아주세요.
반응형'컴퓨터 공부 ver 0.1 > Django' 카테고리의 다른 글
Inheritance(상속)를 이용한 공통 속성 및 기능 정의 (0) 2019.02.08 환경설정 값 관리하기 (0) 2019.02.01 azure에서 static 파일 문제 (0) 2016.05.11 django.db.utils.OperationalError: no such column: django_content_type.name (0) 2016.05.11 The page cannot be displayed because an internal server error has occurred. 메시지가 화면에 보인다. (0) 2016.05.11 댓글