繁体   English   中英

加载 MySQLdb 模块时出错“您安装了 mysqlclient 还是 MySQL-python?”

[英]Error loading MySQLdb Module 'Did you install mysqlclient or MySQL-python?'

我在使用 python34 的 django 项目中使用 windows 10 命令行但是,我在使用 SQL 时遇到了困难。

我已经使用pip install mysqlclient==1.3.5了 mysqlclient 并找到了文件以确保我没有妄想。 然后我运行python manage.py migrate将表迁移到 SQL 数据库(我使用的是 phpmyadmin)。 但是,当命令返回时...

 File "C:\Users\user\env\lib\site-packages\django\db\backends\mysql\base.py", line 30, in <module>
    'Did you install mysqlclient or MySQL-python?' % e
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named 'MySQLdb'.
Did you install mysqlclient or MySQL-python?

我知道这样的问题已经存在,但似乎没有一种解决方案对尝试产生任何影响。

pip install pymysql

然后,编辑项目源目录中的 __init__.py 文件(与 settings.py 相同)

添加:

import pymysql

pymysql.install_as_MySQLdb()

迁移到 python 3 后遇到同样的问题。显然,MySQL-python 不兼容,因此根据官方django 文档,在 Mac 上使用pip install mysqlclientmysqlclient 请注意,文档中提到了一些特定于操作系统的问题。

引用文档

先决条件

您可能需要安装 Python 和 MySQL 开发头文件和库,如下所示:

sudo apt-get install python-dev default-libmysqlclient-dev # Debian / Ubuntu

sudo yum install python-devel mysql-devel # Red Hat / CentOS

brew install mysql-connector-c # macOS (Homebrew) (目前,它有错误。见下文)

在 Windows 上,您可以在没有 MySQLConnector/C 或 MSVC 的情况下安装二进制轮子。

关于 Python 3 的注意事项:如果您使用的是 python3,那么您需要使用以下命令安装 python3-dev:

sudo apt-get install python3-dev # debian / Ubuntu

sudo yum install python3-devel # Red Hat / CentOS

macOS 上 MySQL Connector/C 的 bug 说明

另见: https ://bugs.mysql.com/bug.php?id=86971

MySQL Connector/C 的版本可能有不正确的默认配置选项,在安装mysqlclient-python时会导致编译错误。 (截至 2017 年 11 月,这对于 homebrew 的mysql-connector-c和官方包来说是已知的)

mysql_config的修改解决了这些问题,如下所示。

改变

# on macOS, on or about line 112:
# Create options
libs="-L$pkglibdir"
libs="$libs -l "

# Create options
libs="-L$pkglibdir"
libs="$libs -lmysqlclient -lssl -lcrypto"

不正确的 ssl 配置也可能产生问题; 有关 macOS 的详细信息,请参见brew info openssl

从 PyPI 安装

pip install mysqlclient

注意:Windows 的 Wheels 可能不会与源包一起发布。 您应该在requirements.txt中固定版本以避免尝试安装最新的源包。

从源安装

  1. 通过git clonezipfile下载源代码。
  2. 自定义site.cfg
  3. python setup.py install

对于点

pip install pymysql

对于 pip3 你应该使用

python3 -m pip install PyMySQL

然后,编辑项目源目录中的 init.py 文件(与 settings.py 相同)。 添加:

import pymysql

pymysql.install_as_MySQLdb()

这个命令从上面@Aniket Sinha 的回答中得到了诀窍:

pip install mysqlclient

使用以下命令解决您的问题,

pip install mysql-python
apt-get install python3-mysqldb libmysqlclient-dev python-dev

在 Debian 上工作

如果您已经安装了mysqlclient (即您看到Requirement already satisfied compatible )并且正在Error loading MySQLdb Module ,则以下内容对我有用:

  1. pip uninstall mysqlclient
  2. export LDFLAGS="-L/usr/local/opt/openssl/lib"export CPPFLAGS="-I/usr/local/opt/openssl/include"如此所述
  3. pip install mysqlclient

这重新安装了mysqlclient并出于某种原因解决了我的问题。

对于 MAC 操作系统用户:

我多次遇到这个问题。 这里的关键是在通过pip命令安装mysqlclient之前设置好这些环境变量。 就我而言,它们如下所示:

export LDFLAGS="-L/usr/local/opt/protobuf@3.7/lib"
export CPPFLAGS="-I/usr/local/opt/protobuf@3.7/include"

编辑项目源目录中的 init.py 文件

import pymysql

pymysql.install_as_MySQLdb()

使用anaconda安装mysqlclient非常simple and straight forward

conda install -c bioconda mysqlclient

然后,使用 pip 安装pymysql

pip install pymysql

我在 Windows 中使用 python 3。 我也遇到过这个问题。 我刚刚卸载了“mysqlclient”,然后再次安装。 它以某种方式起作用

即使使用与 python 3 兼容的mysqlclient库,我最近也遇到了这个问题,并设法解决了我的问题,尽管方式有点非正统。 如果您使用的是 MySQL 8,请尝试一下,看看是否有帮助! :)

我只是复制了位于我最新安装的 MySQL 8.0.13 中的libmysqlclient.21.dylib文件,该文件位于/usr/local/mysql/lib中,并将该副本以相同的名称移动到/usr/lib

您将需要在您的 mac 上暂时禁用安全完整性保护,但要执行此操作,因为您将无法或无法更改/usr/lib中任何内容的权限而不禁用它。 您可以通过启动到恢复系统来执行此操作,单击顶部菜单上的实用程序,然后打开终端并在终端中输入csrutil disable 完成此操作后,请记住重新打开安全完整性保护! 与上述过程的唯一区别是您改为运行csrutil enable

您可以在此处了解有关如何禁用和启用 macOS 的安全完整性保护的更多信息。

我只需要更新我的项目的依赖项,然后重新启动服务器。

要解决问题,请运行: pip install mysql-connector-python==8.0.23

在 mac 上使用 mysql.connector 版本 8.0.24 时遇到了这个问题(如果代码库相同,那么问题也应该发生在 Windows 中)。 第 51 行的这个文件导入“从 django.db.backends.mysql.base 导入 DatabaseWrapper 作为 MySQLDatabaseWrapper”。 导入的文件有以下代码 14-20(您收到的确切代码和错误是代码的一部分

try:
    import MySQLdb as Database
except ImportError as err:
    raise ImproperlyConfigured(
        'Error loading MySQLdb module.\n'
        'Did you install mysqlclient?'
    ) from err

错误在这里形成。 不知道为什么这个导入在不同版本的 mysql 连接器中不断返回,但 8.0.23 没有导入,所以我恢复到那个版本并且错误消失了......这是你希望继续使用 mysql.connector 的情况。Python。 不确定逻辑以及为什么此错误在过去 5 年内一直存在...

在 CLI 中运行此命令。

 pip install mysqlclient

[新]如果不起作用,请尝试pip install mysqlclient ,如果您遇到以下错误

MySQLdb/_mysql.c(29): fatal error C1083: Cannot open include file: 'mysql.h': No such file or directory

然后访问站点并下载支持的车轮。 现在如何知道支持的车轮。 例如有多个车轮文件,如下所示:

mysqlclient-1.4.6-cp36- cp36m -win_amd64.whl

请参阅粗体版本 cp36,它表示 CPython 版本 3.6 只需安装它,这将解决您的问题。

哦! 现在,如果您遇到另一个问题如何安装轮文件,请参考以下行。

python -m pip install "C:\Users\Abhijit\Downloads\mysqlclient-1.4.6-cp36-cp36m-win_amd64.whl"

受@elad silver 的回答启发(谢谢)。

对于 OSx (Monterey) 这对我有用:

  1. 安装 protobuf
brew install protobuf
  1. 使用以下行编辑您的 .bashrc 或 .zshenv 文件:
export LDFLAGS="${LDFLAGS} -L/usr/local/opt/protobuf/lib"
export CPPFLAGS="${CPPFLAGS} -I/usr/local/opt/protobuf/include"
  1. 重新安装mysqlclient
pip uninstall mysqlclient
pip install mysqlclient

现在因为 Debian 上的默认 mysql 服务器是 MariaDB。

user@cl1-preprod ~ % mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 39

apt-get install mariadb不存在。 要安装它,您需要安装此软件包apt-get install mariadb-server但这只是 mysql 服务器,客户端也需要apt-get install mariadb-client

然后pip install mysqlclient

user@cl1-preprod ~ % apt-get remove libmysqlclient-dev python-dev
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Le paquet « libmysqlclient-dev » n'est pas installé, et ne peut donc être supprimé
Le paquet « python-dev » n'est pas installé, et ne peut donc être supprimé

你必须安装mysqlclient。 刚跑

pip 安装mysqlclient

尝试在xampp上启动apache和mysql。 这个对我有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM