无法在Windows上安装mysqlclient Python包

时间:2017-10-31 20:36:14

标签: python mysql windows mysql-python

我正在尝试将mysqlclient Python包(https://pypi.python.org/pypi/mysqlclient)安装到Windows 7(在本地PC和Appveyor CI上)的虚拟Python 2.7环境中,但无法完成。

我用Win 7描述了本地PC的问题,但它在Appveyor上的发生方式基本相同。

我开始时的virtualenv包:

pip (9.0.1)
setuptools (36.6.0)
wheel (0.30.0)

pip install mysqlclient最初说:

. . .
running build_ext
building '_mysql' extension
error: Microsoft Visual C++ 9.0 is required. Get it from http://aka.ms/vcpython27

显然,Python 2.7需要VC9。安装后,pip install mysqlclient会更进一步,但未命中包含文件:

. . .
building '_mysql' extension
creating build\temp.win-amd64-2.7
creating build\temp.win-amd64-2.7\Release
C:\Program Files (x86)\Common Files\Microsoft\Visual C++ for Python\9.0\VC\Bin\amd64\cl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -Dversion_info=(1,3,12,'final',0) -D__version__=1.3.12 "-IC:\Program Files (x86)\MySQL\MySQL Connector C 6.1\include" -IC:\Python27\include -IC:\Users\Andi\virtualenvs\mysqlclient\PC /Tc_mysql.c /Fobuild\temp.win-amd64-2.7\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)\\Common Files\\Microsoft\\Visual C++ for Python\\9.0\\VC\\Bin\\amd64\\cl.exe' failed with exit status 2

为了获取头文件,我从https://downloads.mysql.com/archives/get/file/mysql-connector-c-6.1.10-winx64.msi安装了“MySQL Connector / C 6.1.10”。这当然只是第二个最新版本,但我需要从命令行在Appveyor上安装它,并且没有找到如何以无人值守的方式下载最新版本。

此外,使用MSI安装程序会在C:\Program Files\MySQL\MySQL Connector C 6.1中安装软件包,但是pip install中的构建步骤需要C:\Program Files (x86)\MySQL\MySQL Connector C 6.1,因此我将其软链接:

mklink /D "C:\Program Files (x86)\MySQL\MySQL Connector C 6.1" "C:\Program Files\MySQL\MySQL Connector C 6.1"

在查看该版本的MySQL Connector / C中的文件时,它只有lib / vs12和lib / vs14目录:

lib/vs12/mysqlclient.lib
lib/vs14/mysqlclient.lib

正如预期的那样,pip install mysqlclient现在已超出编译范围,但在链接时失败:

. . .
running build_ext
building '_mysql' extension
creating build\temp.win-amd64-2.7
creating build\temp.win-amd64-2.7\Release
C:\Program Files (x86)\Common Files\Microsoft\Visual C++ for Python\9.0\VC\Bin\amd64\cl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -Dversion_info=(1,3,12,'final',0) -D__version__=1.3.12 "-IC:\Program Files (x86)\MySQL\MySQL Connector C 6.1\include" -IC:\Python27\include -IC:\Users\Andi\virtualenvs\mysqlclient\PC /Tc_mysql.c /Fobuild\temp.win-amd64-2.7\Release\_mysql.obj /Zl
_mysql.c
_mysql.c(242) : .... several warnings ...
C:\Program Files (x86)\Common Files\Microsoft\Visual C++ for Python\9.0\VC\Bin\amd64\link.exe /DLL /nologo /INCREMENTAL:NO "/LIBPATH:C:\Program Files (x86)\MySQL\MySQL Connector C 6.1\lib\vs9" /LIBPATH:C:\Python27\Libs /LIBPATH:C:\Users\Andi\virtualenvs\mysqlclient\libs /LIBPATH:C:\Users\Andi\virtualenvs\mysqlclient\PCbuild\amd64 /LIBPATH:C:\Users\Andi\virtualenvs\mysqlclient\PC\VS9.0\amd64 kernel32.lib advapi32.lib wsock32.lib mysqlclient.lib /EXPORT:init_mysql build\temp.win-amd64-2.7\Release\_mysql.obj /OUT:build\lib.win-amd64-2.7\_mysql.pyd /IMPLIB:build\temp.win-amd64-2.7\Release\_mysql.lib /MANIFESTFILE:build\temp.win-amd64-2.7\Release\_mysql.pyd.manifest /MANIFEST
LINK : fatal error LNK1181: cannot open input file 'mysqlclient.lib'
error: command 'C:\\Program Files (x86)\\Common Files\\Microsoft\\Visual C++ for Python\\9.0\\VC\\Bin\\amd64\\link.exe' failed with exit status 1181

我没有找到仍然可以下载的“MySQL Connector / C”软件包的版本,并且可以与VC9一起使用。在此vc9构建中使用vs12或vs14目录中的mysqlclient.lib文件会导致未解析的符号。

我的问题是:

  • 在Windows 7上成功mysql.h获取正确的头文件(例如mysqlclient.lib)和库(例如pip install mysqlclient)需要使用哪些软件包?
  • 更一般地说,Windows 7上成功pip install mysqlclient的先决条件是什么?

3 个答案:

答案 0 :(得分:0)

顺便说一下,我去年7月遇到了同样的问题,现在才开始entry on my blog完成了这个问题。

基本上,你不会喜欢它,但你需要从头开始重新编译mysqlclient,因为 - 正如你所指出的那样 - 因为很长时间以来它不适用于Visual Studio 9时间。

但是,正确行事有点棘手,因为您需要修复一些编译问题,这些问题显然没有在Oracle官方文档中的任何地方记录。 Python setup.py文件也存在问题,因为它不关心平台体系结构并始终在x86目录中查找。这就是你软链接目录的原因。 Github上有open issue提到这一点。

基本上,使用已安装的VC ++ for Python 2.7:

  1. 下载Oracle MySQL C Connector源代码。
  2. 下载并安装适用于Python 2.7的Microsoft Visual C ++编译器。
  3. 使用CMake为MySQL C Connector源代码生成nmake mysqlclient。请注意环境变量,请参阅this Github issue comment
  4. 使用typedef struct { long long quot; long long rem; } lldiv_t; 编译MySQL C Connector mysqlclient库。
  5. 安装MySQL C Connector二进制文件并添加已编译的mysqlclient。
  6. 再次运行pip install mysqlclient。
  7. 第4步很棘手,因为Microsoft不提供C99 stdint.h,inttypes.h和stdlib.h缺少lldiv_t。您可以使用this StackOverflow post来获取stdint.h和inttypes.h,然后在decimal.h中手动定义lldiv_t:

    pip install mysqlclient

    您也可以从较新的Visual Studio复制这些标题,如2013年和2015年。之后,正如您已经想到的那样,您需要将已编译的mysqlclient.lib放入C:\ Program Files(x86)\ MySQL \ MySQL Connector C 6.1 \ lib \ vs9。

    然后发出另一个{"expand":"schema,names","startAt":0,"maxResults":50,"total":4,"issues":[{"expand":"operations,versionedRepresentations,editmeta,changelog,renderedFields","id":"RNG-Key","self":"https://myJira.atlassian.net/rest/api/2/issue/RNG-Key","key":"RNG-Key","fields":{"customfield_17024":null,"customfield_17023":null,"customfield_10073":null,"customfield_17022":null,"customfield_14311":null,"customfield_12010":null,"customfield_14312":null,"customfield_14310":null,"customfield_14315":null}}]} 并完成所有操作。

答案 1 :(得分:0)

http://www.lfd.uci.edu/~gohlke/pythonlibs/#mysql-python下载mysqlclient

选择与您的python版本匹配的版本,例如mysqlclient‑1.4.2‑cp37‑cp37m‑win_amd64.whl,然后:

pip install wheel

pip install mysqlclient‑1.4.2‑cp37‑cp37m‑win_amd64.whl

答案 2 :(得分:0)

https://www.lfd.uci.edu/~gohlke/pythonlibs/中的mysqlclient‑1.4.6‑cp38‑cp38‑win32.whl用于python 3.8