From 04cc286b6b5ad5f3066439bed57b7c192185b3b9 Mon Sep 17 00:00:00 2001 From: erjemin Date: Sun, 29 Oct 2023 01:09:30 +0300 Subject: [PATCH] =?UTF-8?q?=D1=83=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BF=D1=80=D0=BE=D0=B1=D0=BB=D0=B5=D0=BC?= =?UTF-8?q?=20=D1=81=20=D1=83=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BA?= =?UTF-8?q?=D0=BE=D0=B9=20mysqlclient?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- python-mysql.md | 77 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 python-mysql.md diff --git a/python-mysql.md b/python-mysql.md new file mode 100644 index 0000000..61aafbc --- /dev/null +++ b/python-mysql.md @@ -0,0 +1,77 @@ +# Устранение возникшей проблемы с установкой mysqlclient (подключение к MySQL/MariaDB) + +Обычным порядком установка осущесмтвляется командой: +```bash +pip install mysqlclient +``` + +Но иногда возникают проблемы. + +## Проблемы под Apple Mac OS + +Если mysqlclient не устанавливается, то возможно нет БД-коннектора в системе. +Обычно такое происходит если сама СУБД размещена в контейнере Docker (при установке СУБД +в саму систему клиент «прилетает» автоматически). + +Для MariaDB проблема решается временной установкой `mariadb-connector-c` и созданием +символической ссылки на `mysql_config`: +```bash +brew install mariadb-connector-c +sudo ln -s /usr/local/opt/mariadb-connector-c/bin/mariadb_config /usr/local/bin/mysql_config +``` + +Затем активизируем виртуальное окружение нашего проекта, устанавливаем mysqlclient и выходим +из виртуального окружения: +```bash +source ~/path-to-you-prj-enveroment/bin/activate +pip install mysqlclient +deactivate +``` + +Затем удаляем симлинк на коннектор и отключаем его: +```bash +sudo rm /usr/local/bin/mysql_config +brew unlink mariadb-connector-c +``` + +Аналогичным образом решается проблема и с MySQL. Отличается только устанавливаемый клиент: +```bash +brew install mysql-client +sudo ln -s /opt/homebrew/opt/mysql-client/bin/mysql_config /usr/local/bin/mysql_config + +source ~/path-to-you-prj-enveroment/bin/activate +pip install mysqlclient +deactivate + +rm /usr/local/bin/mysql_config +brew unlink mysql-client +``` + +## Проблемы с MYSQLCLIENT_CFLAGS и MYSQLCLIENT_LDFLAGS + +Может возникнуть и под Linux, и под Windows, и под Mac OS (например при обновлении операционной системы, когда +все системные настройки могут слететь). При установке mysqlclient выдается что-то типа такого сообщения: + +```text +Exception: Can not find valid pkg-config name. +Specify MYSQLCLIENT_CFLAGS and MYSQLCLIENT_LDFLAGS env vars manually +[end of output] +``` + +То есть не заданы переменные окружения MYSQLCLIENT_CFLAGS и MYSQLCLIENT_LDFLAGS. Придется +их задать вручную в терминале: + +1. Определим расположение заголовочных файлов и библиотек MySQL (или MariaDB). Размещение + этих файлов отличаются в зависимости от способов установки MySQL и операционной системы. + Используем команду `mysql_config` для получения этой информации. Запустим команду `mysql_config --cflags`, + чтобы получить расположение заголовочных файлов, и команду `mysql_config --libs`, чтобы найти расположение + библиотек. Запишем то что вывели эти обе команды. +2. Установим переменную окружения `MYSQLCLIENT_CFLAGS`. Выполним команду: `export MYSQLCLIENT_CFLAGS="-I"`, + заменив в ней все внутри кавычек (`-I`) путем, который получили с помощью `mysql_config --cflags`. + Например, у меня получилось вот так: `export MYSQLCLIENT_CFLAGS="-I/usr/local/opt/mysql-client/include/mysql"`. +3. Установим переменную окружения `MYSQLCLIENT_LDFLAGS`. Выполним команду: `export MYSQLCLIENT_LDFLAGS="-L"`, + заменив в ней все внутри кавычек (`-L`) путем, который получили с помощью `mysql_config --libs`. + Например, у меня получилось вот так: `export MYSQLCLIENT_LDFLAGS="-L/opt/homebrew/opt/mysql-client/lib + -lmysqlclient -lz -lzstd -L/opt/homebrew/lib -lssl -lcrypto -lresolv"`. + +Теперь, установка mysqlclient должна пройти успешно. \ No newline at end of file