Нет модуля с именем '_mysql_connector' при использовании Django и mysql-connector-python 8.0.32
У меня есть веб-сайт Django 4.1, который прекрасно работал в контейнере Docker с MariaDB 10.5. Я обновил только модуль mysql-connector-python
с 8.0.29 до 8.0.32, но теперь, когда я запускаю веб-контейнер, на котором работает dev-сервер Django, я получаю:
myproject_web | Traceback (most recent call last):
myproject_web | File "/root/.local/share/virtualenvs/code-_Py8Si6I/lib/python3.8/site-packages/mysql/connector/connection_cext.py", line 64, in <module>
myproject_web | import _mysql_connector
myproject_web | ModuleNotFoundError: No module named '_mysql_connector'
myproject_web |
myproject_web | The above exception was the direct cause of the following exception:
myproject_web |
myproject_web | Traceback (most recent call last):
myproject_web | File "/root/.local/share/virtualenvs/code-_Py8Si6I/lib/python3.8/site-packages/mysql/connector/django/base.py", line 60, in <module>
myproject_web | from mysql.connector.connection_cext import CMySQLConnection
myproject_web | File "/root/.local/share/virtualenvs/code-_Py8Si6I/lib/python3.8/site-packages/mysql/connector/connection_cext.py", line 81, in <module>
myproject_web | raise ImportError(
myproject_web | ImportError: MySQL Connector/Python C Extension not available (No module named '_mysql_connector')
myproject_web |
myproject_web | The above exception was the direct cause of the following exception:
...
Я не уверен, где кроется ошибка, имея отрывочное представление о серверах баз данных и их коннекторах и т.д. Если я понижу версию mysql-connector-python
до 8.0.29, то она снова работает (я не могу использовать 8.0.30 или 8.0.31 из-за проблемы с utf8, которая, я надеюсь, будет исправлена в 8.0.32). Вот его журнал изменений.
Мой docker-compose.yml
имеет следующее для контейнера базы данных:
services:
db:
container_name: myproject_db
env_file: .env
image: mariadb:10.5
ports:
- 4306:3306
restart: unless-stopped
volumes:
- ./docker/db/init:/docker-entrypoint-initdb.d
- mysql_data:/var/lib/mysql
И мой веб-контейнер Dockerfile
запускается:
FROM python:3.8-slim-bullseye
RUN apt-get update \
&& apt-get install -y build-essential git libpq-dev libmariadb-dev mariadb-client --no-install-recommends \
&& rm -rf /var/lib/apt/lists/* /usr/share/doc /usr/share/man \
&& apt-get clean
Та же проблема при запуске Django 3.2-4.1 в Docker, на Mac M1: "No module named '_mysql_connector'"
mysql-connector-python==8.0.31 и ниже работает корректно на всех системах (родной и Docker).
mysql-connector-python==8.0.32 корректно работает в Docker под Win10 и успешно развертывается на наших родных серверах Ubuntu. Только Mac M1 выдает ошибку.
Контейнер Docker на Win10 инициализируется с MySQL Docker Image 8.0.31-1.2.10-server, тогда как тот же контейнер Docker на Mac M1 показывает "MySQL Docker Image 8.0.32-1.2.11-server".
Простите, это всего лишь подсказки, но это похоже на еще одну проблему зависимости от M1.
У меня возникла эта проблема с Django 4.2.6 и mysql-connector-python 8.1.0. Проблема была решена путем понижения версии до mysql-connector-python 8.0.31