我试图将mysqlclient package (https://pypi.python.org/pypi/mysqlclient)安装到Windows7上的虚拟Python2.7环境中(在本地PC上和Appveyor上),但无法完成。
我描述的问题为本地PC与Win 7,但它的发生基本上相同的方式上的应用程序。
启动时,虚拟包中的包:
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显然,Python2.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安装了“https://downloads.mysql.com/archives/get/file/mysql-connector-c-6.1.10-winx64.msi连接器/C 6.1.10”。诚然,这只是第二个最新版本,但我需要从命令行将其安装在Appveyor上,并且没有找到如何以无人值守的方式下载最新版本。
此外,使用MSI安装程序在C:\Program Files\MySQL\MySQL Connector C 6.1中安装包,但是pip中的构建步骤需要在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连接器/C中的文件时,它只有lib/vs14 12和lib/vs14 14目录:
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连接器/C“包,仍然可以下载,并与VC9工作。使用此mysqlclient.lib生成中的vs12或vs14目录中的vs14文件会产生未解析的符号。
我的问题是:
mysql.h)和库(例如mysqlclient.lib),以便在Windows 7上获得成功的pip install mysqlclient?pip install mysqlclient的先决条件是什么?发布于 2019-02-22 15:52:39
从http://www.lfd.uci.edu/~gohlke/pythonlibs/#mysql-python下载mysqlclient
选择与python版本相匹配的版本,例如mysqlclient-1.4.2-cp37-cp37m-winamd64.whl,然后:
pip install wheel
pip install mysqlclient‑1.4.2‑cp37‑cp37m‑win_amd64.whl发布于 2018-01-21 23:05:08
顺便说一句,我在去年7月遇到了同样的问题,直到现在我才完成了一个关于这个问题的我博客上的条目。
基本上,您不会喜欢它,但是您需要从头开始重新编译mysqlclient,因为--正如您所指出的--从很长一段时间以来,Visual 9是不可用的。
但是,正确地处理这个问题有点棘手,因为您需要修复Oracle官方文档中任何地方都没有记录的一些编译问题。Python文件也存在问题,因为它不关心平台架构,总是在setup.py目录中查找。所以你才会把目录软链接起来。有一个公开发行上提到了这一点。
因此,基本上,您已经安装了用于Python2.7的VC++:
NMake Makefiles。注意环境变量,请参阅这篇吉特布的评论。nmake mysqlclient C连接器mysqlclient库。第4步很棘手,因为微软不提供C99 stdint.h、intypes.h和stdlib.h缺少lldiv_t。您可以使用这个StackOverflow post获取stdint.h和inttypees.h,然后手动将lldiv_t定义为:
typedef struct {
long long quot;
long long rem;
} lldiv_t;还可以从较新的Visual (如2013和2015 )复制这些标头。之后,正如您已经知道的,您需要将编译好的mysqlclient.lib放入C:\Program (x86)\MySQL\MySQL连接器C6.1\lib\vs9中。
然后发布另一个pip install mysqlclient,您就都完成了。
https://stackoverflow.com/questions/47044149
复制相似问题