У меня есть совершенно новый проект django 2.2.1, который я только что установил в python 3.7 virtualenv на OS X (10.14.4). После некоторых разочарований я установил mysqlclient, но когда я запускаю сервер django dev, он не распознает, что он установлен:
Вот шаги, которые я предпринял до сих пор:
brew install mysql
pipenv --three
pipenv install django==2.2.1
pipenv install mysqlclient
brew uninstall mysql
brew install mysql-connector-c
pipenv install mysqlclient
brew unlink mysql-connector-c
brew install mysql
django-admin startproject projectname
Теперь единственное изменение, которое я внес в стандартную установку django, - это изменение базы данных по умолчанию на django.db.backends.mysql, и при запуске сервера django я получаю следующее:
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?
Однако, возвращаясь к virtualenv и выполняя "pip install mysqlclient", вы получите:
Requirement already satisfied: mysqlclient in /Users/<username>/.local/share/virtualenvs/<projectname>-KrUE_JNo/lib/python3.7/site-packages (1.4.2.post1)
Есть идеи, почему django не видит mysqlclient, установленный в virtualenv? Я могу подтвердить, что все вышеперечисленное было выполнено в virtualenv. Я подозреваю, что это как-то связано с ошибкой, из-за которой OSX заставляет вас установить его, но я не уверен, как его отделить.
Я также пытался заменить mysqldb на pymysql, как предлагается здесь , но это заставляет сервер выдавать другую ошибку:
raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.
Mysql дан для этого проекта, поэтому использование альтернативного бэкэнда не вариант. Любая помощь с благодарностью получена, большое спасибо заранее.
ОБНОВЛЕНИЕ: Вывод стоп-кадра:
Django==2.2.1
django-auth-ldap==1.7.0
Markdown==3.1
mysql-connector-python==8.0.16
mysqlclient==1.4.2.post1
protobuf==3.7.1
pyasn1==0.4.5
pyasn1-modules==0.2.5
PyMySQL==0.9.3
pyodbc==4.0.26
python-ldap==3.2.0
pytz==2019.1
simplejson==3.16.0
six==1.12.0
sqlparse==0.3.0
xmltodict==0.12.0
ОБНОВЛЕНИЕ 2:
После сообщения Конора (спасибо Конор) я снова начал с свежего virtualenv и снова успешно установил mysqlclient1.4.2.post1. Вот вывод из pip freeze сейчас:
Django==2.2.1
mysqlclient==1.4.2.post1
pytz==2019.1
sqlparse==0.3.0
По-прежнему получаю ту же ошибку, когда я делаю python manage.py runserver, хотя:
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?
ОБНОВЛЕНИЕ 3:
Я подумал, что я бы попытался импортировать модуль MySQLdb в командной строке python, чтобы посмотреть, смогу ли я узнать больше, и он вернет следующее:
>>> import MySQLdb
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/<username>/.local/share/virtualenvs/<projectname>-KrUE_JNo/lib/python3.7/site-packages/MySQLdb/__init__.py", line 18, in <module>
from . import _mysql
ImportError: dlopen(/Users/<username>/.local/share/virtualenvs/<projectname>-KrUE_JNo/lib/python3.7/site-packages/MySQLdb/_mysql.cpython-37m-darwin.so, 2): Symbol not found: _mysql_affected_rows
Referenced from: /Users/<username>/.local/share/virtualenvs/<projectname>-KrUE_JNo/lib/python3.7/site-packages/MySQLdb/_mysql.cpython-37m-darwin.so
Expected in: flat namespace
in /Users/<username>/.local/share/virtualenvs/<projectname>-KrUE_JNo/lib/python3.7/site-packages/MySQLdb/_mysql.cpython-37m-darwin.so