Вопрос или проблема
Я использую систему Arch Linux.
Я использую виртуальную среду, созданную с помощью:
python -m venv .venv
Я хотел подключиться к MariaDB, используя Python.
Сначала я попробовал “mysql-connector-python”, но у него были некоторые проблемы.
raise get_mysql_exception(
mysql.connector.errors.DatabaseError: 1273 (HY000): Неизвестная сопоставляемость: 'utf8mb4_0900_ai_ci'
Затем я попытался установить коннектор MariaDB с помощью:
source .venv/bin/activate
pip3 install mariadb
Я получаю эту ошибку и не могу найти решение
Сборка mariadb==1.0.11
Загрузка mariadb-1.0.11.zip (85 кБ)
Установка зависимостей для сборки ... готово
Получение требований для сборки колеса ... готово
Подготовка метаданных (pyproject.toml) ... готово
Сборка колес для собранных пакетов: mariadb
Сборка колеса для mariadb (pyproject.toml) ... ошибка
ошибка: подпроцесс завершился с ошибкой
× Сборка колеса для mariadb (pyproject.toml) не прошла успешно.
│ код выхода: 1
╰─> [36 строк вывода]
запуск bdist_wheel
запуск сборки
запуск build_py
создание build/lib.linux-x86_64-cpython-312/mariadb
копирование mariadb/__init__.py -> build/lib.linux-x86_64-cpython-312/mariadb
копирование mariadb/__init__.py -> build/lib.linux-x86_64-cpython-312/mariadb
создание build/lib.linux-x86_64-cpython-312/mariadb/constants
копирование mariadb/constants/__init__.py -> build/lib.linux-x86_64-cpython-312/mariadb/constants
копирование mariadb/constants/CLIENT.py -> build/lib.linux-x86_64-cpython-312/mariadb/constants
копирование mariadb/constants/INDICATOR.py -> build/lib.linux-x86_64-cpython-312/mariadb/constants
копирование mariadb/constants/CURSOR.py -> build/lib.linux-x86_64-cpython-312/mariadb/constants
копирование mariadb/constants/FIELD_TYPE.py -> build/lib.linux-x86_64-cpython-312/mariadb/constants
запуск build_ext
сборка расширения 'mariadb._mariadb'
создание build/temp.linux-x86_64-cpython-312/mariadb
gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall -march=x86-64 -mtune=generic -O3 -pipe -fno-plt -fexceptions -Wp,-D_FORTIFY_SOURCE=3 -Wformat -Werror=format-security -fstack-clash-protection -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -g -ffile-prefix-map=/build/python/src=/usr/src/debug/python -flto=auto -ffat-lto-objects -march=x86-64 -mtune=generic -O3 -pipe -fno-plt -fexceptions -Wp,-D_FORTIFY_SOURCE=3 -Wformat -Werror=format-security -fstack-clash-protection -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -g -ffile-prefix-map=/build/python/src=/usr/src/debug/python -flto=auto -march=x86-64 -mtune=generic -O3 -pipe -fno-plt -fexceptions -Wp,-D_FORTIFY_SOURCE=3 -Wformat -Werror=format-security -fstack-clash-protection -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -g -ffile-prefix-map=/build/python/src=/usr/src/debug/python -flto=auto -fPIC -DPY_MARIADB_MAJOR_VERSION=1 -DPY_MARIADB_MINOR_VERSION=0 -DPY_MARIADB_PATCH_VERSION=11 -I/usr/include/mysql -I/usr/include/mysql/mysql -I./include -I/home/anand_maurya/Documents/SchoolProject/.venv/include -I/usr/include/python3.12 -c mariadb/mariadb.c -o build/temp.linux-x86_64-cpython-312/mariadb/mariadb.o -DDEFAULT_PLUGINS_SUBDIR=\"/usr/lib/mysql/plugin\"
mariadb/mariadb.c: В функции ‘PyInit__mariadb’:
mariadb/mariadb.c:155:35: ошибка: требуется lvalue как левый операнд присваивания
155 | Py_TYPE(&MrdbConnection_Type) = &PyType_Type;
| ^
mariadb/mariadb.c:168:31: ошибка: требуется lvalue как левый операнд присваивания
168 | Py_TYPE(&MrdbCursor_Type) = &PyType_Type;
| ^
mariadb/mariadb.c:174:29: ошибка: требуется lvalue как левый операнд присваивания
174 | Py_TYPE(&MrdbPool_Type) = &PyType_Type;
| ^
mariadb/mariadb.c:180:34: ошибка: требуется lvalue как левый операнд присваивания
180 | Py_TYPE(&MrdbIndicator_Type) = &PyType_Type;
| ^
mariadb/mariadb.c:186:38: ошибка: требуется lvalue как левый операнд присваивания
186 | Py_TYPE(&Mariadb_Fieldinfo_Type) = &PyType_Type;
| ^
mariadb/mariadb.c:192:38: ошибка: требуется lvalue как левый операнд присваивания
192 | Py_TYPE(&Mariadb_DBAPIType_Type) = &PyType_Type;
| ^
ошибка: команда '/usr/bin/gcc' завершилась с кодом 1
[конец вывода]
примечание: Эта ошибка происходит из подпроцесса и скорее всего не является проблемой pip.
ОШИБКА: завершение сборки колеса для mariadb
Не удалось собрать mariadb
ОШИБКА: ОШИБКА: Не удалось создать установочные колеса для некоторых проектов на основе pyproject.toml (mariadb)
Буду признателен за любой отзыв.
Условный коннектор MariaDB/Python версии 1.0.x больше не поддерживается – используйте 1.1.x вместо.
Если вы хотите использовать старую версию 1.0.11, вам также потребуется более старая версия Python. Поддерживаемые версии Python для коннектора MariaDB/Python 1.0.11 определены в setup.py:
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Programming Language :: Python :: 3.10',
Ответ или решение
Проблема, с которой вы столкнулись при установке MariaDB Connector/Python, может быть вызвана несколькими факторами, включая несовместимость версий и отсутствие необходимых библиотек. Давайте рассмотрим шаги для устранения данной проблемы.
Шаг 1: Версия Python
Первое, на что стоит обратить внимание, это версия Python, используемая в вашем виртуальном окружении. Как вы указали, вы пытаетесь установить версию MariaDB Connector/Python 1.0.11, которая больше не поддерживается. Эта версия поддерживает лишь Python 3.6–3.10. Если у вас установлена более новая версия Python (например, 3.11 или 3.12), вам следует либо установить поддерживаемую версию Python, либо перейти на новую версию MariaDB Connector.
Решение:
-
Проверьте текущую версию Python, активировав ваше виртуальное окружение и выполнив команду:
python --version
-
Если версия Python выше 3.10, попробуйте использовать более новую версию MariaDB Connector, например:
pip install mariadb==1.1.0
Шаг 2: Установка необходимых зависимостей
Для успешной сборки пакета могут понадобиться некоторые системные библиотеки. Убедитесь, что у вас установлены необходимые заголовочные файлы для разработки библиотеки MariaDB. В Arch Linux вам, возможно, потребуется установить пакет mariadb
и gcc
, если они еще не установлены. Вы можете сделать это с помощью следующей команды:
sudo pacman -S mariadb gcc
Шаг 3: Очистка кэша pip
Иногда проблемы могут возникнуть из-за кэша pip. Попробуйте очистить кэш, прежде чем повторно устанавливать пакет:
pip cache purge
Шаг 4: Установка MariaDB Connector
После выполнения всех вышеуказанных действий попробуйте установить MariaDB Connector снова. Если вы используете более новую версию, вам достаточно выполнить:
pip install mariadb
Шаг 5: Запуск отладки
Если вы все еще получаете ошибки, запустите pip с опцией отладки, чтобы увидеть более подробные логи:
pip install mariadb --verbose
Резюме
Ваша проблема, вероятно, связана с устаревшей версией MariaDB Connector/Python и несовместимой версией Python. Обновите соединитель до более новой версии и убедитесь, что у вас установлены все необходимые зависимости. Следуя этим шагам, вы сможете установить MariaDB Connector без ошибок. Если проблемы сохраняются, рассмотрите возможность использования других библиотек, таких как mysql-connector-python
, или обратитесь к документации MariaDB для получения дополнительной информации.