【问题标题】:Unable to install mysqlclient in python3 virtualenv无法在 python3 virtualenv 中安装 mysqlclient
【发布时间】:2015-12-04 15:02:45
【问题描述】:

我想用 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 中其他问题中建议的软件包)。

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

【问题讨论】:

    标签: python mysql django


    【解决方案1】:

    使用 pymysql 应该可以解决你的问题。使用pip3 install pymysql。安装后,在文件目录project/project/__init__.py写下这个

    import pymysql 
    pymysql.install_as_MySQLdb()
    

    注意:- project 是您的 django 项目的名称。

    【讨论】:

    • 谢谢,它有效。但我想知道如何在没有这种方式的情况下解决它 - 在我的另一台上我能够安装 mysqlclient 并且两台计算机都有相同的 debian,我找不到任何它们会不同的连接包
    【解决方案2】:

    您可以尝试按照the documentation 的说明安装python3-devlibmysqlclient-dev。在我注意到我需要这些软件包之前,我遇到了同样的问题。

    【讨论】:

      【解决方案3】:

      如果您使用 python 3.53.6,您应该遇到this issue 中描述的问题。

      引用该库的一位贡献者:

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

      谢天谢地,Christoph Gohlke(加利福尼亚大学欧文分校荧光动力学实验室)提供了一个用于 Python 扩展包的非官方 Windows 二进制文件,您可以在那里下载该库的轮子 (.whl):

      根据你的系统和安装的python版本下载。

      那你只需要做(在下载文件的目录下):

      pip install mysqlclient-....whl
      

      【讨论】:

        【解决方案4】:

        如果您的系统中安装了多个版本的 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
        

        这应该可行!

        【讨论】:

          【解决方案5】:

          如果您使用的是 Linux:

          在安装mysqlclient的pypiguide中提到,

          您可能需要像这样安装 Python 3 和 MySQL 开发头文件和库

          sudo apt-get install python3-dev default-libmysqlclient-dev build-essential
          

          注意: (用你的python版本替换python3)例如

          sudo apt-get install python3.8-dev default-libmysqlclient-dev build-essential
          

          【讨论】:

            【解决方案6】:

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

            1. 使用来自第三方网站的预编译二进制文件,例如 lfd(仅适用于 Windows)

            2. 通过python dev包安装编译所需的头文件,如果要构建扩展,则需要安装相应的dev包。使用您的包管理器在系统范围内安装它们,并且不要忘记提及您用于项目的特定 python 版本。从 Ubuntu 开始,python 3.6 是默认版本,但我的虚拟环境是为 python3.7 设置的,我必须通过

              专门安装开发包

              apt-get install python3.7-dev

            这是我对 stackoverflow 的第一个回答。我希望它会对某人有所帮助。

            【讨论】:

              【解决方案7】:

              注意以下步骤:

              • 需要 Microsoft Visual C++ 14.0。在HERE下载它

              • HERE下载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

              • 完成

              【讨论】:

                【解决方案8】:

                您可以在 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
                

                【讨论】:

                  【解决方案9】:

                  我在安装 mysqlclient python 3.9 32 位时遇到问题。 由于官方文档的建议,我解决了它。 Install windows 部分

                  安装 MariaDB Connector/C 32 位版本后。

                  pip install mysqlclient
                  

                  运行没有错误

                  【讨论】:

                    【解决方案10】:

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

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

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

                    现在运行下面的命令

                    pip install xxx.whl

                    祝你好运!!

                    【讨论】:

                    猜你喜欢
                    • 2019-07-29
                    • 1970-01-01
                    • 1970-01-01
                    • 2021-08-25
                    • 2018-11-09
                    • 2017-09-06
                    • 1970-01-01
                    • 2018-12-26
                    • 1970-01-01
                    相关资源
                    最近更新 更多