我尝试安装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

当前回答

我找到了解决方案。我也遇到了同样的问题和错误,安装“amara”。我安装了mingw32,但需要配置distutils。

我已经安装了Python 2.6。我将mingw32安装到C:\programs\mingw\将mingw32的bin目录添加到环境变量:append c:\programs\MinGW\bin;到PATH将位于C:\Python26\Lib\distutils\distutils.cfg的distutils.cfg文件编辑为:[生成]编译器=mingw32现在运行easy_install.exe amara。

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

其他回答

我也遇到过同样的问题,所以我将在这里讲述我的故事,希望它能帮助其他人解决同样的问题并节省我刚刚花的几个小时:

我在一个windows7盒子里有mingw(g++(GCC)4.6.1)和python 2.7.3,我正在尝试安装PyCrypto。

在运行setup.py install时,这一切都以以下错误开始:

error: Unable to find vcvarsall.bat

通过将mingw指定为所选编译器,在谷歌搜索错误后轻松解决:

setup.py install build --compiler=mingw32

问题是,然后我得到了一个不同的错误:

configure: error: cannot run C compiled programs.

事实证明,我的防病毒软件阻止了新编译的.exe的执行。我刚刚禁用了防病毒“常驻屏蔽”,并转到下一个错误:

cc1.exe: error: unrecognized command line option '-mno-cygwin' 
error: command 'gcc' failed with exit status 1

这解决了这个问题:“要么安装稍微旧一点的MinGW版本,要么在Python目录中编辑distutils\cygwinccompiler.py以删除-mno-cygwin的所有实例。”(从这里开始)

现在,我终于可以开始工作了。

看起来它正在寻找VC编译器,所以您可以尝试使用-c mingw32提及编译器类型,因为您有msys

python setup.py install -c mingw32

我有python 2.73和windows 7。对我有效的解决方案是:

将mingw32的bin目录添加到环境变量:用C:\programs\mingw\bin追加PATH;已创建distutils.cfg,位于C:\Python27\Lib\distutils\distutils.ccfg,包含:[生成]编译器=mingw32

要处理MinGW不再识别-mno cygwin标志的问题,请删除C:\Python27\Lib\distutils\cygwincompiler.py第322到326行中的标志,因此如下所示:

  self.set_executables(compiler='gcc -O -Wall',
                         compiler_so='gcc -mdll -O -Wall',
                         compiler_cxx='g++ -O -Wall',
                         linker_exe='gcc',
                         linker_so='%s %s %s'
                                    % (self.linker_dll, shared_option,
                                       entry_point))

发生什么事?Python模块可以部分用C或C++编写(通常是为了速度)。如果您尝试用Pip(或setup.py)安装这样的包,它必须从源代码编译C/C++。开箱即用,Pip会厚颜无耻地假设您安装了Microsoft Visual C++编译器。如果您没有它,您将看到这条神秘的错误消息“错误:无法找到vcvarsall.bat”。

规定的解决方案是安装C/C++编译器,或者Microsoft Visual C++,或者MinGW(一个开源项目)。然而,安装和配置两者都非常困难。(编辑2014:微软发布了一个专门针对Python 2.7的C++编译器)

最简单的解决方案是为流行的Python包使用Christoph Gohlke的Windows安装程序(.msi)。他为Python2.x和3.x、32位和64位构建安装程序。您可以从http://www.lfd.uci.edu/~gohlke/pythonlibs/


如果你也认为“错误:找不到vcvarsall.bat”是一条荒谬而晦涩且毫无帮助的消息,那么请在http://bugs.python.org/issue2943将其替换为更有用、更友好的信息。

相比之下,Ruby附带了一个包管理器Gem,并提供了一个准官方的C/C++编译器DevKit。如果您尝试安装不带软件包的软件包,您会看到以下有用的友好信息:

请更新PATH以包含构建工具或从下载DevKithttp://rubyinstaller.org/downloads并遵循以下说明http://github.com/oneclick/rubyinstaller/wiki/Development-Kit

您可以在https://stackoverflow.com/a/13445719/284795

我在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中的命令提示符)一起使用。