컴퓨터 공부 ver 0.1/Django

ImportError: No module named 'MySQLdb'

fromleaf 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


혹시 해보시고 안되시면 메일이나 댓글 달아주세요.

반응형