无法在Python3虚拟环境中安装mysqlclient。

8

我希望使用MySQL和Python 3来运行django。我使用virtualenv --no-site-packages -p python3 ./初始化虚拟环境。然后,我使用pip安装了django和wheel,因此pip freeze会显示:

django==1.8.3
wheel==0.24.0

然后我尝试使用pip install mysqlclient安装mysqlclient,但最终失败了。

Downloading/unpacking mysqlclient
Downloading mysqlclient-1.3.6.tar.gz (78kB): 78kB downloaded
Running setup.py (path:/tmp/pip-build-jpdlrnc8/mysqlclient/setup.py) egg_info for package mysqlclient

Installing collected packages: mysqlclient
Running setup.py install for mysqlclient
building '_mysql' extension
i586-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -fPIC -Dversion_info=(1,3,6,'final',1) -D__version__=1.3.6 -I/usr/include/mysql -I/usr/include/python3.4m -I/home/ondra/zelvovani/include/python3.4m -c _mysql.c -o build/temp.linux-i686-3.4/_mysql.o -DBIG_JOINS=1 -fno-strict-aliasing -DTAOCRYPT_DISABLE_X86ASM -g -DNDEBUG
error: command 'i586-linux-gnu-gcc' failed with exit status 1
Complete output from command /home/ondra/zelvovani/bin/python3 -c "import setuptools, tokenize;__file__='/tmp/pip-build-jpdlrnc8/mysqlclient/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-fa_6nkh3-record/install-record.txt --single-version-externally-managed --compile --install-headers /home/ondra/zelvovani/include/site/python3.4:
running install

running build

running build_py

creating build

creating build/lib.linux-i686-3.4

copying _mysql_exceptions.py -> build/lib.linux-i686-3.4

creating build/lib.linux-i686-3.4/MySQLdb

copying MySQLdb/__init__.py -> build/lib.linux-i686-3.4/MySQLdb

copying MySQLdb/compat.py -> build/lib.linux-i686-3.4/MySQLdb

copying MySQLdb/converters.py -> build/lib.linux-i686-3.4/MySQLdb

copying MySQLdb/connections.py -> build/lib.linux-i686-3.4/MySQLdb

copying MySQLdb/cursors.py -> build/lib.linux-i686-3.4/MySQLdb

copying MySQLdb/release.py -> build/lib.linux-i686-3.4/MySQLdb

copying MySQLdb/times.py -> build/lib.linux-i686-3.4/MySQLdb

creating build/lib.linux-i686-3.4/MySQLdb/constants

copying MySQLdb/constants/__init__.py -> build/lib.linux-i686-3.4/MySQLdb/constants

copying MySQLdb/constants/CR.py -> build/lib.linux-i686-3.4/MySQLdb/constants

copying MySQLdb/constants/FIELD_TYPE.py -> build/lib.linux-i686-3.4/MySQLdb/constants

copying MySQLdb/constants/ER.py -> build/lib.linux-i686-3.4/MySQLdb/constants

copying MySQLdb/constants/FLAG.py -> build/lib.linux-i686-3.4/MySQLdb/constants

copying MySQLdb/constants/REFRESH.py -> build/lib.linux-i686-3.4/MySQLdb/constants

copying MySQLdb/constants/CLIENT.py -> build/lib.linux-i686-3.4/MySQLdb/constants

running build_ext

building '_mysql' extension

creating build/temp.linux-i686-3.4

i586-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -fPIC -Dversion_info=(1,3,6,'final',1) -D__version__=1.3.6 -I/usr/include/mysql -I/usr/include/python3.4m -I/home/ondra/zelvovani/include/python3.4m -c _mysql.c -o build/temp.linux-i686-3.4/_mysql.o -DBIG_JOINS=1 -fno-strict-aliasing -DTAOCRYPT_DISABLE_X86ASM -g -DNDEBUG

error: command 'i586-linux-gnu-gcc' failed with exit status 1

----------------------------------------
Cleaning up...
Command /home/ondra/zelvovani/bin/python3 -c "import setuptools, tokenize;__file__='/tmp/pip-build-jpdlrnc8/mysqlclient/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-fa_6nkh3-record/install-record.txt --single-version-externally-managed --compile --install-headers /home/ondra/zelvovani/include/site/python3.4 failed with error code 1 in /tmp/pip-build-jpdlrnc8/mysqlclient
Storing debug log for failure in /home/ondra/.pip/pip.log

我已经安装了libmysqlclient-devpython3-devzlib1g-dev这些软件包,这些软件包是在stackoverflow的其他问题中建议安装的。

你有什么想法,我做错了什么吗?

10个回答

13

使用pymysql应该可以解决你的问题。使用pip3 install pymysql进行安装。安装完成后,在文件目录project/project/__init__.py中写入以下内容:

import pymysql 
pymysql.install_as_MySQLdb()

注意:project是你的Django项目的名称。


1
谢谢,它有效。但我想知道如何在不使用这种方法的情况下解决它 - 在我的另一台计算机上,我能够安装mysqlclient,并且两台计算机都有相同的Debian,我找不到任何连接的软件包,它们之间会有所不同。 - Ondra Mička

5
你可以尝试按照文档所说安装python3-devlibmysqlclient-dev。我之前也遇到了相同的问题,直到注意到我需要这些软件包才解决了问题。

3
如果您正在使用Linux:
如在安装mysqlclient的pypi指南guide中所提到的,
您可能需要安装Python 3和MySQL开发头文件和库,方法如下:
sudo apt-get install python3-dev default-libmysqlclient-dev build-essential

注意: (将 python3 替换为您的 Python 版本)例如:
sudo apt-get install python3.8-dev default-libmysqlclient-dev build-essential

2
如果你正在使用Python 3.53.6,你可能会遇到这个问题所描述的情况。
引用该库的一位贡献者的话说:

在Windows上构建MySQL-python很困难。你应该从源代码构建而不是通过pip安装,因为你需要编辑setup.cfg文件。

值得庆幸的是,由Christoph Gohlke(加州大学欧文分校荧光动力学实验室)提供了非官方的Python扩展包Windows二进制文件。你可以下载此库的wheels(.whl): 根据您的系统和已安装的Python版本进行下载。
然后,您只需要在下载文件的目录中运行以下命令:
pip install mysqlclient-....whl

1
如果您的系统中安装了多个版本的Python,则通常会出现此问题。首先,全局卸载mysqlclient和pymysql(如果已安装):
pip3 uninstall mysqlclient
pip3 uninstall pymysql

现在,请转到您的项目并删除venv。
sudo rm -r venv

如果使用PyCharm,它将弹出设置解释器的窗口。选择Python3.6作为您的解释器并创建一个虚拟环境。如果不使用PyCharm,
python3 -m virtualenv venv
source venv/bin/activate

现在安装mysqlclient,
pip3 install mysqlclient

这应该可以工作!


0
请注意以下步骤:
  • 需要安装 Microsoft Visual C++ 14.0。请在此处下载。

  • 此处下载 mysqlclient。

  • 以下是兼容的 mysqlclient 和 python 版本列表:

    mysqlclient‑1.4.6‑cp39‑cp39‑win_amd64.whl --> python 3.9 (64 位) mysqlclient‑1.4.6‑cp39‑cp39‑win32.whl --> python 3.9 (32 位)

    mysqlclient‑1.4.6‑cp38‑cp38‑win_amd64.whl --> python 3.8 (64 位) mysqlclient‑1.4.6‑cp38‑cp38‑win32.whl --> python 3.8 (32 位)

    mysqlclient‑1.4.6‑cp37‑cp37m‑win_amd64.whl --> python 3.7 (64 位) mysqlclient‑1.4.6‑cp37‑cp37m‑win32.whl --> python 3.7 (32 位)

    mysqlclient‑1.4.6‑cp36‑cp36m‑win_amd64.whl --> python 3.6 (64 位) mysqlclient‑1.4.6‑cp36‑cp36m‑win32.whl --> python 3.6 (32 位)

  • 根据您的 python 版本下载 mysql。

  • 安装 mysql --> pip3 install mysqlclient‑1.4.6.xxxxx.whl

  • 完成


0

问题出现在编译二进制文件时,有两种可能的解决方案:

  1. 使用第三方网站(如lfd)提供的预编译二进制文件(仅适用于Windows)。

  2. 通过Python开发包安装必要的头文件进行编译。如果您想要构建扩展程序,则需要安装相应的开发包。使用软件包管理器在系统范围内安装它们,并不要忘记提及您正在为项目使用的特定Python版本。就Ubuntu而言,Python 3.6是默认版本,但我的虚拟环境设置为Python 3.7,我必须明确安装开发包:

    apt-get install python3.7-dev

这是我在stackoverflow上的第一个答案。我希望它能帮助到某些人。


0
我在安装mysqlclient python 3.9 32位版本时遇到了问题。多亏了官方文档的建议,我解决了这个问题。Windows版安装部分。 在安装MariaDB Connector/C 32位版本后问题得以解决。
pip install mysqlclient

无错误运行


0

你可以在 python3.* 虚拟环境或系统级别上轻松安装 mysqlclient,只需要按照以下步骤操作:

首先,进行安装:

$ sudo apt-get install gcc libssl-dev

$ sudo apt-get install python3.6-dev libmysqlclient-dev

不要忘记根据您的需要更新Python版本,对于Python2.7,请使用

$ sudo apt-get install python-dev libmysqlclient-dev

现在只需使用以下命令安装MySQL客户端:

$ pip install mysqlclient

如果你要在系统级别安装相同的东西,那么在命令开头加上sudo

注意: 每当创建 Python 虚拟环境时,在继续进行要求安装之前,请始终更新 pip 和 setuptools :

$ pip install pip setuptools -U

-1

从Christophe Gohlke的预编译Python软件包库中,根据您的操作系统下载mysqlclient的预编译whl文件。以下是下载位置。

http://www.lfd.uci.edu/~gohlke/pythonlibs/#vlfd

现在进入您下载该文件的目录并在那里打开命令提示符。

现在运行以下命令

pip install xxx.whl

祝您好运!!


此解决方案已经在这个现有答案中提供。 - snakecharmerb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接