pip安装mysqlclient返回"fatal error C1083: Cannot open file: 'mysql.h': No such file or directory"。

63

这是个问题:

我尝试这样安装mysqlclient:

C:\Users\amccommon349>pip install mysqlclient
Collecting mysqlclient
  Using cached https://files.pythonhosted.org/packages/ec/fd/83329b9d3e14f7344d1
cb31f128e6dbba70c5975c9e57896815dbb1988ad/mysqlclient-1.3.13.tar.gz
Installing collected packages: mysqlclient
  Running setup.py install for mysqlclient ... error
    Complete output from command c:\users\amccommon349\appdata\local\programs\python\python36\python.exe -u -c "import setuptools, tokenize;__file__='C:\\Users\\AMCCOM~1\\AppData\\Local\\Temp\\pip-install-qcgo48hf\\mysqlclient\\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record C:\Users\AMCCOM~1\AppData\Local\Temp\pip-record-q4yoftj8\install-record.txt --single-version-externally-managed --compile:

c:\users\amccommon349\appdata\local\programs\python\python36\lib\distutils\dist.py:261: UserWarning: Unknown distribution option: 'long_description_content_type'
warnings.warn(msg)
running install
running build
running build_py
creating build
creating build\lib.win-amd64-3.6
copying _mysql_exceptions.py -> build\lib.win-amd64-3.6
creating build\lib.win-amd64-3.6\MySQLdb
copying MySQLdb\__init__.py -> build\lib.win-amd64-3.6\MySQLdb
copying MySQLdb\compat.py -> build\lib.win-amd64-3.6\MySQLdb
copying MySQLdb\connections.py -> build\lib.win-amd64-3.6\MySQLdb
copying MySQLdb\converters.py -> build\lib.win-amd64-3.6\MySQLdb
copying MySQLdb\cursors.py -> build\lib.win-amd64-3.6\MySQLdb
copying MySQLdb\release.py -> build\lib.win-amd64-3.6\MySQLdb
copying MySQLdb\times.py -> build\lib.win-amd64-3.6\MySQLdb
creating build\lib.win-amd64-3.6\MySQLdb\constants
copying MySQLdb\constants\__init__.py -> build\lib.win-amd64-3.6\MySQLdb\constants
copying MySQLdb\constants\CLIENT.py -> build\lib.win-amd64-3.6\MySQLdb\constants
copying MySQLdb\constants\CR.py -> build\lib.win-amd64-3.6\MySQLdb\constants
copying MySQLdb\constants\ER.py -> build\lib.win-amd64-3.6\MySQLdb\constants
copying MySQLdb\constants\FIELD_TYPE.py -> build\lib.win-amd64-3.6\MySQLdb\constants
copying MySQLdb\constants\FLAG.py -> build\lib.win-amd64-3.6\MySQLdb\constants
copying MySQLdb\constants\REFRESH.py -> build\lib.win-amd64-3.6\MySQLdb\constants
running build_ext
building '_mysql' extension
creating build\temp.win-amd64-3.6
creating build\temp.win-amd64-3.6\Release
C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Tools\MSVC\14.14.26428\bin\HostX86\x64\cl.exe /c/nologo/Ox /W3 /GL /DNDEBUG /MD -Dversion_info=(1,3,13,'final',0) -D__version__=1.3.13 "-IC:\Program Files (x86)\MySQL\MySQL Connector C 6.1\include" -Ic:\users\amccommon349\appdata\local\programs\python\python36\include -Ic:\users\amccommon349\appdata\local\programs\python\python36\include "-IC:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Tools\MSVC\14.14.26428\include" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17134.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17134.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17134.0\um" "-IC:\ProgramFiles (x86)\Windows Kits\10\include\10.0.17134.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17134.0\cppwinrt" /Tc_mysql.c /Fobuild\temp.win-amd64-3.6\Release\_mysql.obj /Zl _mysql.c
_mysql.c(29): fatal error C1083: Cannot open include file: 'mysql.h': No such file or directory
  error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildTools\\VC\\Tools\\MSVC\\14.14.26428\\bin\\HostX86\\x64\\cl.exe' failed with exit status 2

我确保我已经拥有了来自Visual Studio构建工具所需的所有文件,我下载了mysql-python连接器,并更新了我的pip和setup tools。我是一个完全的初学者,希望能得到任何关于如何解决这个错误的输入。


可能是无法在Windows中安装mysql-python(新版本)的重复问题。 - Alex R
25个回答

78
您可以使用https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient下载适用于您的Python版本的非官方Windows二进制文件。然后使用pip进行安装。这样,您就能避免处理Visual Studio构建工具的麻烦。
只需下载最适合您的mysqlclient.whl文件。我认为在您的情况下,应该是

mysqlclient‑1.3.13‑cp36‑cp36m‑win_amd64.whl

并运行
pip install "path to the downloaded .whl file"

我仍然面临着相同的问题。 - Labeo
您可以在此处查看日志 https://stackoverflow.com/questions/55542089/unable-to-install-mysql-client-1-3-12-getting-fatal-error-c1083-cannot-open-inc - Labeo
4
顺便提一句,以下这个东西不起作用(在Win7 x64上的Python 3.7):ERROR: mysqlclient-1.4.3-cp37-cp37m-win_amd64.whl 不支持此平台。 - user519179
哦,我明白了,这是因为Python默认安装32位版本而不是64位版本,甚至在下载按钮上或附近都没有说明。 - user519179
6
请确保下载正确的wheel。因此,请考虑以下基本内容:(1) 如果您使用的是Python 3.8,请使用cp38(2) 如果您的Python shell是64位,请使用以64结尾的wheel,反之亦然。(3) 拥有64位Windows并不意味着您的Python也是64位,这就是我的情况。(4) 通过在终端中启动Python解释器,您可以看到Python的位数。我的情况是:Python 3.8.5 (tags/v3.8.5:580fbb0,Jul 20 2020,15:43:08) [MSC v.1926 32 bit (Intel)] on win32。 - Vinh
显示剩余10条评论

33

尝试在64位环境下安装Python32的mysqlclient时会出现此错误。卸载Python并重新安装64位版本,然后pip install mysqlclient将不会出现任何错误。


17
他其实已经通过解释错误来回答这个问题了。 - Garth
1
我正在使用64位版本的Python 3.9.0。在安装MySQL时仍然遇到相同的问题。 - syd

24

可能这是我见过的最愚蠢的错误之一。
我安装了Python 3.7.3 32位版本,同时还有最新的pip3,我正在将wheels安装到我的Python中... 然后我就碰上了这个愚蠢的错误...
也许我的情况有点不同,但你可以通过仔细查看错误来解决它... 开始时,似乎缺少某些东西,然后你开始责怪自己、Windows、32/64位等等..
退一步...只需退一步并仔细阅读那个讨厌的红色错误消息.... 非常仔细地读它
在我的情况下,它是

ERROR: Command errored out with exit status 1:
     command: 'c:\users\myUserName\appdata\local\programs\python\python37-32\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\MASTER~1\\AppData\\Local\\Temp\\pip-install-z7x81g2q\\mysqlclient\\setup.py'"'"'; __file__='"'"'C:\\Users\\MASTER~1\\AppData\\Local\\Temp\\pip-install-z7x81g2q\\mysqlclient\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\MASTER~1\AppData\Local\Temp\pip-record-z1mvci5v\install-record.txt' --single-version-externally-managed --compile
         cwd: C:\Users\MASTER~1\AppData\Local\Temp\pip-install-z7x81g2q\mysqlclient\
    Complete output (30 lines):
    running install
    running build
    running build_py
    creating build
    creating build\lib.win32-3.7
    creating build\lib.win32-3.7\MySQLdb
    copying MySQLdb\__init__.py -> build\lib.win32-3.7\MySQLdb
    copying MySQLdb\_exceptions.py -> build\lib.win32-3.7\MySQLdb
    copying MySQLdb\compat.py -> build\lib.win32-3.7\MySQLdb
    copying MySQLdb\connections.py -> build\lib.win32-3.7\MySQLdb
    copying MySQLdb\converters.py -> build\lib.win32-3.7\MySQLdb
    copying MySQLdb\cursors.py -> build\lib.win32-3.7\MySQLdb
    copying MySQLdb\release.py -> build\lib.win32-3.7\MySQLdb
    copying MySQLdb\times.py -> build\lib.win32-3.7\MySQLdb
    creating build\lib.win32-3.7\MySQLdb\constants
    copying MySQLdb\constants\__init__.py -> build\lib.win32-3.7\MySQLdb\constants
    copying MySQLdb\constants\CLIENT.py -> build\lib.win32-3.7\MySQLdb\constants
    copying MySQLdb\constants\CR.py -> build\lib.win32-3.7\MySQLdb\constants
    copying MySQLdb\constants\ER.py -> build\lib.win32-3.7\MySQLdb\constants
    copying MySQLdb\constants\FIELD_TYPE.py -> build\lib.win32-3.7\MySQLdb\constants
    copying MySQLdb\constants\FLAG.py -> build\lib.win32-3.7\MySQLdb\constants
    running build_ext
    building 'MySQLdb._mysql' extension
    creating build\temp.win32-3.7
    creating build\temp.win32-3.7\Release
    creating build\temp.win32-3.7\Release\MySQLdb
    C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.21.27702\bin\HostX86\x86\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MT -Dversion_info=(1,4,2,'post',1) -D__version__=1.4.2.post1 "-IC:\Program Files (x86)\MySQL\MySQL Connector C 6.1\include\mariadb" -Ic:\users\MyUserName\appdata\local\programs\python\python37-32\include -Ic:\users\MyUserName\appdata\local\programs\python\python37-32\include "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.21.27702\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\cppwinrt" /TcMySQLdb/_mysql.c /Fobuild\temp.win32-3.7\Release\MySQLdb/_mysql.obj /Zl /D_CRT_SECURE_NO_WARNINGS
    _mysql.c
    MySQLdb/_mysql.c(29): fatal error C1083: Cannot open include file: 'mysql.h': No such file or directory
    error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildTools\\VC\\Tools\\MSVC\\14.21.27702\\bin\\HostX86\\x86\\cl.exe' failed with exit status 2
    ----------------------------------------
ERROR: Command errored out with exit status 1: 'c:\users\MyUserName\appdata\local\programs\python\python37-32\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\MASTER~1\\AppData\\Local\\Temp\\pip-install-z7x81g2q\\mysqlclient\\setup.py'"'"'; __file__='"'"'C:\\Users\\MASTER~1\\AppData\\Local\\Temp\\pip-install-z7x81g2q\\mysqlclient\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\MASTER~1\AppData\Local\Temp\pip-record-z1mvci5v\install-record.txt' --single-version-externally-managed --compile Check the logs for full command output.

你仔细阅读了吗?我假设你已经拥有了一切......编译工具,MySQL Connector C 6.1......你甚至将它移动到Program Files(x86)中......那么错在哪里呢?现在再仔细看看。

C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.21.27702\bin\HostX86\x86\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MT -Dversion_info=(1,4,2,'post',1) -D__version__=1.4.2.post1 "-IC:\Program Files (x86)\MySQL\MySQL Connector C 6.1\include\mariadb" -

我相信你已经看到了它...还是没有?...让我为您加粗

"-IC:\Program Files (x86)\MySQL\MySQL Connector C 6.1\include\mariadb" -

mariadb
安装程序寻找mariadb的includes和后来的libs,所以只需前往mariadb官网下载MariaDB C/C++连接器并安装即可。
但还没完...前往C:\Program Files (x86)\MySQL\MySQL Connector C 6.1\include,创建mariadb文件夹,并从mariaDb连接器安装include文件夹中复制粘贴内容。同样地,前往C:\Program Files (x86)\MySQL\MySQL Connector C 6.1\lib,为lib文件夹做同样的操作。
这样你就应该拥有:

C:\Program Files (x86)\MySQL\MySQL Connector C 6.1\include\mariadb  

C:\Program Files (x86)\MySQL\MySQL Connector C 6.1\lib\mariadb  

现在执行 pip3 install mysqlclient
然后就可以愉快地安装了,没有任何提示...完结.

Successfully installed mysqlclient-1.4.2.post1

这对我来说只是创建了64个未解决的链接错误。不错的发现。我想我只需要安装32位版本就可以了。 - Anthony Rolfe
哎呀,我在安装mysqlclient上苦苦挣扎了一番,最终终于解决了问题。 - Benjamin
谢谢 John。这真的帮了我很多。 - bp89
谢谢John。通过安装MariaDB Connector/C 3.0.10 Stable,它可以工作。正在安装收集的软件包:mysqlclient 运行mysqlclient的setup.py安装...完成 成功安装mysqlclient-2.0.1 - Jason.Jan

13

这是解决我的问题的方法

  • 这里安装MySQL Connector/C(存档版本)

它可能安装在以下位置C:\Program Files\MySQL\MySQL Connector C 6.1


  • 将整个文件夹MySQL Connector C 6.1复制到C:\Program Files (x86)\MySQL\MySQL Connector C 6.1

  • 尝试执行命令pip3 install mysqlclient

成功? 干得好!


不成功?


  • 这里安装MariaDB连接器

可能安装在以下位置

C:\Program Files\MariaDB\MariaDB Connector C 64-bit

  • 从以下位置复制内容:

C:\Program Files\MariaDB\MariaDB Connector C 64-bit\include

并将其粘贴到一个文件夹中。 将其命名为 mariadb 并将其粘贴到以下位置

C:\Program Files (x86)\MySQL\MySQL Connector C 6.1\include\


  • 从以下位置复制内容:

    C:\Program Files\MariaDB\MariaDB Connector C 64-bit\lib

并将其粘贴到一个文件夹中,将其命名为 mariadb 并将其粘贴到以下位置。

`C:\Program Files (x86)\MySQL\MySQL Connector C 6.1\lib`

  • 尝试执行命令pip3 install mysqlclient

这对我很有效。


1
它对我有效。Windows 11,Python 3.10.6 [MSC v.1932 64位(AMD64)]。谢谢。 - Rodrigo Nogueira

7
我曾经遇到过这个问题(完全相同的错误),尝试了上面提到的所有解决方案,但没有一个有效(至少对我来说),实际上,我差点就因为这个问题把头发都拔光了,直到我用一种非常奇怪、简单和愚蠢的方法找到了解决办法!!
以下是我采取的步骤,问题得到了解决,生活变甜了。
首先,我从这里安装了MySQL Connector/C
其次,在安装完成后,我将MySQL Connector C 6.1文件夹Program files/MySQL复制到Program files (x86)/MySQL
请注意,如果在Program files (x86)中不存在MySQL文件夹(像我一样),则可能需要创建该文件夹。
就是这么简单,这对我有用,似乎对于某些(或所有)64位Windows操作系统,pip或更可能是mysqlclient设置脚本只能在Program files (x86)文件夹中搜索某些MySQL文件(如“mysql.h”),而不搜索Program files。由于在Program files (x86)中找不到任何内容,会引发一个非常愚蠢的错误!!!难以置信吧。

是的,我尝试了以上许多解决方案,但都没有对我起作用,所以我尝试了您在评论中提到的方法,它完美地运行了。谢谢你。 - user1655410
1
@user1655410,编程愉快 :) - Code_Worm

4

我在使用pip安装mysqlclient时遇到了同样的问题,无需手动下载.whl文件,您可以指定所需包的版本。以下是我的解决方案:

pip install mysqlclient==1.4.6

谢谢。


3

以上的解决方案都没有对我起作用。显然,我必须把我的Python版本从3.7.x降级到3.6.4,这样问题就得到了解决。这是python=3.6.4下载链接

我建议为此创建一个新的虚拟环境,而不是卸载您的主要Python。在此处找到有关如何创建venv的详细文档。


3
这是关于在Windows 10上64位Python版本的问题。以下方法解决了我的问题。
  1. 安装32位Windows Python版本(目前版本为3.7.1)
  2. 安装Visual Studio Build Tools https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2017 用于C++
  3. https://downloads.mysql.com/archives/c-c/下载并安装32位MySQL Connector版本6.1.11
安装完成后,可以使用pip install mysqlclient安装mysqlclient。
希望有人能提出更好的解决方案,不需要降级到32位,因为这不是一个好的解决方案,只是可行的。我找到了一种解决MySQL问题的方法,但在尝试安装Channels时又遇到了问题。在Windows上,Python 64位正在寻找32位库而不是64位库。到目前为止,这种解决方案已经解决了我在Windows上的所有Python构建问题。

2
为了解决它,我已经访问了这个页面

enter image description here

并下载了mysqlclient-1.4.6-pp373-pypy36_pp73-win32.whl文件。接着,将其放置在特定的文件夹中,在其中打开终端,激活虚拟环境venv并运行。
pip install mysqlclient-1.4.6-cp39-cp39-win_amd64.whl

enter image description here


1
有时候错误也是解释器造成的,这在我的情况下就是如此。我使用的是3.8版本的Python,并将其安装在D:/中,所以它没有正确地安装。
因此,我卸载了它并重新正确地安装了它,然后它就可以正常工作了。

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