Djangoのマイグレーションでエラーが発生するときの対処法

Pocket

DjangoでMySQLを使ってマイグレーション時にエラーが発生し、結構はまったので、備忘録として残しておきます。

【環境】

・Windows10(VMWare Workstation15 player)
・Ubuntu20.04
・Python 3.8.2

【エラー対処方法】

「Did you install mysqlclient?」エラーが出た場合の対処方法

以下のようなエラーが発生した時

test@ubuntu:~/デスクトップ/python/myapp$ python manage.py makemigrations helloworld
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/dist-packages/django/db/backends/mysql/base.py", line 16, in <module>
    import MySQLdb as Database
ModuleNotFoundError: No module named 'MySQLdb'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "manage.py", line 21, in <module>
    main()
・
・
・
    raise ImproperlyConfigured(
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?
test@ubuntu:~/デスクトップ/python/myapp$

「pip install mysqlclient」をインストールする。

もし、「pip install mysqlclient」で次のようなエラーが出たら「sudo apt install libpython3.8-dev」を実行する

test@ubuntu:~/デスクトップ/python/myapp$ pip install mysqlclient
Defaulting to user installation because normal site-packages is not writeable
Collecting mysqlclient
  Using cached mysqlclient-2.0.1.tar.gz (87 kB)
Using legacy setup.py install for mysqlclient, since package 'wheel' is not installed.
Installing collected packages: mysqlclient
    Running setup.py install for mysqlclient ... error
    ERROR: Command errored out with exit status 1:
     command: /usr/bin/python3.8 -u -c 'import sys, setuptools, tokenize; sys.argv[0]
・
・ 
(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-yff8str7/install-record.txt --single-version-externally-managed --user --prefix= --compile --install-headers /home/test/.local/include/python3.8/mysqlclient Check the logs for full command output.
test@ubuntu:~/デスクトップ/python/myapp$ 
sudo apt install libpython3.8-dev

この後にもう一度「pip install mysqlclient」を実行する。

問題なければこれでマイグレーションが実行できます。

以上です。ありがとうございました。

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です