ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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


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

    반응형

    댓글

Designed by Tistory.