没有使用 Django 和 mysql-connector-python 8.0.32 的名为“_mysql_connector”的模块

问题描述 投票:0回答:2

我有一个 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
django docker mysql-connector
2个回答
1
投票

在 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 依赖问题。


0
投票

我在 Django 4.2.6 和 mysql-connector-python 8.1.0 中遇到了这个问题。通过降级 mysql-connector-python 8.1.0 解决了该问题

© www.soinside.com 2019 - 2024. All rights reserved.