我尝试安装Python包dulwich:

pip install dulwich

但我收到了一条神秘的错误消息:

error: Unable to find vcvarsall.bat

如果我尝试手动安装软件包,也会发生同样的情况:

> python setup.py install
running build_ext
building 'dulwich._objects' extension
error: Unable to find vcvarsall.bat

当前回答

您可以从安装编译版本http://www.lfd.uci.edu/~gohlke/pythonlibs/

其他回答

我在Windows 7 x64上使用Python 3.4.1时遇到了这个问题,不幸的是,我需要的软件包没有适合我使用的exe或轮子。该系统需要一些“变通方法”,具体如下(TLDR位于底部)。

使用Jaxrtech上面的答案中的信息,我确定我需要Visual Studio C++2010(sys.version return MSC v.1600),所以我从他的答案中的链接安装了Visual C++2010 Express,这是http://go.microsoft.com/?linkid=9709949.我安装了所有的更新,但正如你在下面看到的,这是一个错误。此时只应安装Express的原始版本(没有更新任何内容)。

vcvarsall.bat现在存在,但在安装包时出现了一个新错误,query_vcvarsall引发ValueError(str(list(result.keys()))ValueError:[u'path']。还有其他与此错误相关的stackerflow问题,例如为Python 2.7构建/安装C模块时出错

根据这个答案,我确定2010 Express只安装32位编译器。要获得64位(和其他)编译器,您需要安装Windows 7.1 SDK。看见http://msdn.microsoft.com/en-us/windowsserver/bb980924.aspx

但这不会为我安装,安装程序返回错误安装失败,返回代码5100。我在以下链接找到了解决方案:http://support.microsoft.com/kb/2717426.简而言之,如果安装了更新版本的x86和x64 Microsoft Visual C++2010 Redistributable,它们将与SDK安装程序中的版本冲突,需要首先卸载。

然后安装了SDK,但我注意到vcvars64.bat仍然不存在于C:\Program Files(x86)\Microsoft Visual Studio 10.0\VC\bin及其子文件夹中。vcvarsall.bat运行vcvars64批处理文件,因此如果没有它,python包仍然无法安装(我忘记了此时显示的错误)。

然后我在这里找到了一些说明:http://www.cryptohaze.com/wiki/index.php/Windows_7_Build_Setup#Download_VS_2010_and_Windows_SDK_7.1按照说明,我已经安装了Express和7.1 SDK,因此安装了SDK 7.1 SP1,并修复了缺失的头文件。然后,我手动创建了vcvars64.bat,内容为CALL setenv/x64。我会把所有的说明贴在这里,这样他们就不会迷路了。

步骤1是下载Visual Studio Express 2010。http://www.microsoft.com/visualstudio/en-us/products/2010-editions/express是一个很好的开始。下载安装程序并运行它(vc_web.exe)。您不需要SQL 2008附加下载。您还需要64位的Windows SDK(当前为7.1)编译器-除非您想进行32位编译,否则完全支持。。。http://www.microsoft.com/en-us/download/details.aspx?id=8279很好下载此文件的起点-您需要运行winsdk_web.exe下载时!这里的默认安装刚刚好。最后,下载并安装Windows SDK 7.1 SP1更新:http://www.microsoft.com/en-us/download/details.aspx?id=4422为了修复丢失的头文件,VS2010 SP1。http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=75568aa6-8107-475d-948a-ef22627e57a5该死的,修复VS2010 Express丢失的批处理文件。这越来越荒谬了。在C:\Program Files(x86)\Microsoft Visual Studio 10.0\VC\bin\amd64中,使用以下命令创建“vcvars64.bat”(您需要运行作为管理员):CALL setenv/x64

我的python包仍然没有安装(无法回忆错误)。然后我找到了一些使用特殊SDK 7.1命令提示符的说明(复制如下),请参阅:https://mail.python.org/pipermail/distutils-sig/2012-February/018300.html

别管这个问题。这里有人注意到菜单上的此项:开始->所有程序->Microsoft Windows SDK v7.1->Windows SDK 7.1命令提示符这将运行一个批处理作业,该作业似乎为编译器设置了一个工作环境。在该提示符下,您可以键入“setup.py build”或“setup.py install”。

我按照指示打开了Windows SDK 7.1命令提示符,并使用它在python包上运行easy_install。最后,成功了!


太长,读不下去了

安装Visual Studio Express 2010(最好没有更新的可再发行版或SQL server)。安装Windows 7.1 SDKInstal SDK 7.1 SP1更新和VS2010 SP1头文件修复(可能不需要此步骤)。使用内容CALL setenv/x64手动创建C:\Program Files(x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\vcvars64.bat开始->所有程序->Microsoft Windows SDK v7.1->Windows SDK 7.1命令提示符以打开特殊的x64命令提示符,然后可以与python/easy_install/pip/etc(包括virtual_envs中的命令提示符)一起使用。

@monkey给出的答案是正确的答案之一,但不完整。

如果您想使用MinGW,您应该选择C、C++以及MinGW安装过程中建议的其他开发工具,以获得“make.exe”

您还必须在env中将路径设置为make.exe。

要完成他的回答,请执行以下步骤:

将mingw32的bin目录添加到环境变量中追加C:\Programs\MinGW\bin;C: \Programs\MinGW\msys\1.0\bin;到PATH将位于C:\Python26\Lib\distutils\distutils.cfg的distutils.cfg文件编辑(如果不存在则创建)为:[生成]编译器=mingw32

确保通过打开新的cmd.exe来设置环境变量。

更新:评论指出,此处的说明可能很危险。请考虑使用Visual C++2008速成版或专门构建的Microsoft Visual C++编译器Python版(详细信息),不要使用下面的原始答案。原始错误消息表示未安装所需版本的Visual C++。


对于Windows安装:

在为包安装运行setup.py时,Python 2.7会搜索已安装的Visual Studio 2008。通过在调用setup.py之前在VS90COMNTOOLS环境变量中设置正确的路径,可以诱骗Python使用较新的Visual Studio。

根据安装的Visual Studio版本执行以下命令:

Visual Studio 2010(VS10):SET VS90COMNTOOLS=%VS100COMNTOOLS%Visual Studio 2012(VS11):SET VS90COMNTOOLS=%VS110COMNTOOLS%Visual Studio 2013(VS12):SET VS90COMNTOOLS=%VS120COMNTOOLS%Visual Studio 2015(VS14):SET VS90COMNTOOLS=%VS140COMNTOOLS%


警告:如下所述,如果您试图编译python模块,则此答案不太可能奏效。

有关详细信息,请参阅在Windows上为Python 2.7构建lxml。

如果要使用Visual Studio C++而不是mingw进行编译。。。

运行python.exe以显示编译时使用的VC++版本(示例如下)。使用Python编译时使用的Visual C++编译器的相应版本是很重要的,因为distilutils的get_build_version防止混合版本(根据Piotr的警告)。黄色(顶部)是Python 2.7,使用MSC v.1500(Visual Studio C++2008)编译红色(底部)是Python 3.4.1,使用MSC v.1600(Visual Studio C++2010)编译使用下表[1]将内部VC++版本与相应的Visual Studio版本匹配:MSC v.1000->Visual C++4.xMSC v.1100->Visual C++5MSC v.1200->Visual C++6MSC v.1300->Visual C++.NETMSC v.1310->Visual C++.NET 2003MSC v.1400->Visual C++2005(8.0)MSC v.1500->Visual C++2008(9.0)MSC v.1600->Visual C++2010(10.0)MSC v.1700->Visual C++2012(11.0)MSC v.1800->Visual C++2013(12.0)MSC v.1900->Visual C++2015(14.0)MSC v.1910->Visual C++2017(15.0)MSC v.1911->Visual C++2017(15.3)MSC v.1912->Visual C++2017(15.5)MSC v.1913->Visual C++2017(15.6)MSC v.1914->Visual C++2017(15.7)MSC v.1915->Visual C++2017(15.8)MSC v.1916->Visual C++2017(15.9)从上一步下载并安装相应版本的Visual Studio C++。下面列出了VC++特定版本的其他注意事项。Visual Studio C++2008说明对于32位编译器,请下载Visual Studio C++2008速成版。对于64位编译器[2][3],请下载适用于Windows 7和.NET Framework 3.5 SP1的Windows SDK。取消选中“开发人员工具”>>“Visual C++编译器”以外的所有选项,以节省安装SDK工具所需的时间和磁盘空间。Visual Studio C++2010注释根据Microsoft的说法,如果您安装了Visual Studio 2010 SP1,它可能已经删除了VC++的编译器和库。如果是这种情况,请下载Visual C++2010 SP1编译器更新。Visual Studio C++2015注释如果您不需要Visual Studio IDE,请下载Visual Studio C++2015生成工具。Visual Studio C++2017注释如果您不需要Visual Studio IDE,请下载Visual Studio 2017的生成工具。建议:如果您同时安装了32位和64位Python,您可能还想使用virtualenv创建单独的Python环境,这样您就可以一次使用一个或另一个,而不必打乱选择使用哪个Python版本的路径。

根据@srodriguex的说法,您可以跳过手动加载批处理文件(步骤4-6),而是按照以下答案将一些批处理文件复制到Python正在搜索的位置。如果这不起作用,以下是最初对我有效的步骤。

打开cmd.exe在尝试安装需要C扩展名的东西之前,运行以下批处理文件将VC++编译器的环境加载到会话中(即环境变量、编译器路径等)。执行:32位编译器:注意:32位Windows安装将仅具有预期的C:\Program Files\“C:\Program Files(x86)\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat”64位编译器:“C:\Program Files(x86)\Microsoft Visual Studio 9.0\Common7\Tools\vsvars64.bat”注意:是的,本机64位编译器位于程序文件(x86)中。不要问我为什么。此外,如果您想知道vcvars64.bat和vcvarsx86_amd64.bat之间的区别,或者更重要的是amd64和x86_amd 64之间的区别是什么,前者用于本机64位编译器工具,后者是可以在32位Windows安装上运行的64位交叉编译器。更新:如果由于某种原因,您收到错误:。。。这在当时是出乎意料的。其中。。。是一系列字符,那么您需要检查路径变量是否没有多余的字符,如额外的引号或多余的字符。如果批处理文件一开始就无法理解,那么它将无法更新您的会话路径。如果进展顺利,根据您运行的VC++版本和命令,您应该收到以下消息之一:对于32位编译器工具:设置使用Microsoft Visual Studio 20xx x86工具的环境。对于64位编译器工具:正在设置使用Microsoft Visual Studio 20xx x64工具的环境。现在,通过python setup.py install或pip install pkg名称运行安装程序希望并祈祷行星正确对齐,以便VC++合作。

Microsoft Visual C++编译器for Python 2.7位于http://www.microsoft.com/en-us/download/details.aspx?id=44266不是解决方案?