我有一个 Django 4.1 网站,在具有 MariaDB 10.5 的 Docker 容器中运行良好。我只将
mysql-connector-python
模块从 8.0.29 更新到 8.0.32,但现在当我启动运行 Django 开发服务器的 Web 容器时,我得到:
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因为我希望在 8.0.32 中修复一个 utf8 问题)。 这是它的变更日志。
我的
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
在 Mac M1 上的 Docker 中运行 Django 3.2-4.1 时出现同样的问题:“没有名为 '_mysql_connector' 的模块”
mysql-connector-python==8.0.31 及更低版本在所有系统(本机和 Docker)上正确运行。
mysql-connector-python==8.0.32 在Win10下的Docker中正确运行,并在我们本机Ubuntu服务器上成功部署。只有 Mac M1 会产生错误。
Win10 Docker 容器使用 MySQL Docker Image 8.0.31-1.2.10-server 进行初始化,而 Mac M1 上的同一个 Docker 容器则显示“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.1.0 解决了该问题