Нет такого файла libmariadb.3.dylib ошибка при импорте MySQLdb на mac M1
Я перенес свои данные на M1 Monterey MacOS с intel macmini. Я был счастлив использовать django и mariadb пока не установил пакет с помощью homebrew . Я установил homebrew и вместе с ним установил vim, после чего мое соединение django-mariadb внезапно перестало работать
Я обнаружил, что ошибка была вызвана в python3.7/site-packages/MySQLdb/init.py в 18-й строке в моем venv.
try:
from MySQLdb.release import version_info
from . import _mysql # this line causes the problem
assert version_info == _mysql.version_info
except Exception:
raise ImportError(
"this is MySQLdb version {}, but _mysql is version {!r}\n_mysql: {!r}".format(
version_info, _mysql.version_info, _mysql.__file__
)
)
И трассировка стека идет
Traceback (most recent call last):
File "/Users/gwanghyeongim/Documents/revhat/basecamp/.venv/basecamp/lib/python3.7/site-packages/MySQLdb/__init__.py", line 18, in <module>
from . import _mysql
ImportError: dlopen(/Users/gwanghyeongim/Documents/revhat/basecamp/.venv/basecamp/lib/python3.7/site-packages/MySQLdb/_mysql.cpython-37m-darwin.so, 0x0002): Library not loaded: /usr/local/opt/mariadb/lib/libmariadb.3.dylib
Referenced from: /Users/gwanghyeongim/Documents/revhat/basecamp/.venv/basecamp/lib/python3.7/site-packages/MySQLdb/_mysql.cpython-37m-darwin.so
Reason: tried: '/usr/local/opt/mariadb/lib/libmariadb.3.dylib' (no such file), '/usr/lib/libmariadb.3.dylib' (no such file)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/gwanghyeongim/Documents/revhat/basecamp/.venv/basecamp/lib/python3.7/site-packages/MySQLdb/__init__.py", line 24, in <module>
version_info, _mysql.version_info, _mysql.__file__
NameError: name '_mysql' is not defined
Некоторое время назад я писал пост о том, что _mysql не определен, и решил проблему, экспортировав путь в ~/.zshrc. Но на этот раз я погуглил о загадочном файле libmariadb.3.dylib, но не смог найти удовлетворительных результатов: большинство постов было о libmysqlclient.21.dylib.
Я подозреваю, что это связано с домашней сборкой на M1. Как бы подтверждая мои подозрения, на mysqlclient github есть некоторые проблемы, и заметная одна решает похожую проблему, но мейнтейнер, похоже, не так сильно хочет помочь.
Я установил и переустановил brew, и даже попробовал установить Rosetta2 homebrew, следуя этой странице, безрезультатно.
Другая страница с проблемами домашнего пивоварения, к сожалению, тоже не сильно мне помогла.
Мое окружение выглядит следующим образом:
- python3.7.7 установлен через installer
- Apple M1 pro Monterey версия 12.0.01
- mysqlclient 2.1.0
Любая помощь или мысли, пожалуйста?
Следующее относится только к тем, кто использует чип M1
В двух словах
- используйте Rosetta homebrew .
- поставьте
--no-cache-dirпри установкеmysqlclient
Перед выполнением описанной ниже процедуры убедитесь, что вы удалили родной homebrew.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
и удалите родные настройки в ~/.zprofile.
eval "$(/opt/homebrew/bin/brew shellenv)"
Используйте Rosetta homebrew вместо родного homebrew. Это, похоже, вызывает начало кошмара.
arch -x86_64 zsh
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Когда вы введете команду which brew, вы увидите путь, начинающийся с /usr/local/, вот так
/usr/local/bin/brew
Теперь ваша сборка - это rosetta homebrew, а не native homebrew. Затем перейдите в вашу виртуальную среду, переустановите mysqlclient, но с тегом --no-cache-dir для install.
pip uninstall mysqlclient -y
pip install mysqlclient --no-cache-dir
Теперь попробуйте импортировать MySQLdb в shell. На этот раз он не должен регистрировать стектрейс.
python
>>> import MySQLdb
Теперь у django не будет проблем с подключением к mysql или mariadb.