错误:找不到vcvarsall.bat

我尝试安装Python包杜尔维奇

pip install dulwich

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

error: Unable to find vcvarsall.bat

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

> python setup.py installrunning build_extbuilding 'dulwich._objects' extensionerror: Unable to find vcvarsall.bat
944829 次浏览

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

python setup.py install -c mingw32

我找到了答案。我有完全相同的问题,和错误,安装'amara'。我已经安装了ming w32,但distutils需要配置。

  1. 我已经安装了Python 2.6。
  2. 我安装了ming w32到C:\programs\mingw\
  3. 将ming w32的bin目录添加到您的环境变量中:将c:\programs\MinGW\bin;附加到PATH
  4. 编辑(如果不存在则创建)distutils.cfg位于C:\Python26\Lib\distutils\distutils.cfg的文件:

    [build]compiler=mingw32
  5. Now run easy_install.exe amara.

Make sure environment is set by opening a new cmd.exe.

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

我在Windows 7盒子中安装了ming w(g++(GCC)4.6.1)和python 2.7.3,我正在尝试安装PyCrypto。

这一切都始于运行setup.py安装时的错误:

error: Unable to find vcvarsall.bat

在谷歌搜索错误后,通过指定ming w作为选择的编译器轻松解决:

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实例。”(从这里开始)

我终于可以开始工作了。

更新:注释指出这里的说明可能是危险的。考虑使用VisualC++2008 Express版本或使用下面的原始答案专门构建的适用于Python的Microsoft VisualC++编译器细节)和不是。原始错误消息表示未安装所需版本的VisualC++。


对于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

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

  1. 将ming w32的bin目录添加到环境变量:追加PATHC:\programs\mingw\bin;
  2. 创建distutils.cfg位于C:\Python27\Lib\distutils\distutils.cfg包含:

    [build]compiler=mingw32

To deal with MinGW not recognizing the -mno-cygwin flag anymore, remove the flag in C:\Python27\Lib\distutils\cygwincompiler.py line 322 to 326, so it looks like this:

  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))

也许有人会感兴趣,下面的工作对我的py2exe包。(我有Windows 7 64位和便携式python 2.7,Visual Studio 2005 Express with Windows SDK for Windows 7和. NET Framework 4)

set VS90COMNTOOLS=%VS80COMNTOOLS%

然后:

python.exe setup.py install

如果您希望在安装了不要 Visual Studio的Windows机器上安装pyodbc,另一个选项是使用二进制发行版手动安装pyodbc。

如果您在正在使用的计算机上没有管理员权限并且正在尝试设置虚拟环境,这将特别有用。

步骤:

  1. 这里(pyodbc-X.X.X.win-Y-py2.7.exe)下载最新的Windows安装程序
  2. 使用7-Zip(或WinRAR或其他)打开安装程序可执行文件
  3. 提取pyodbc.pyd和pyodbc-X.X.X-py2.7.egg-info并将它们放在[python installation directory or virtualenv]\Lib\site-packages
  4. 没有步骤4:)

我尝试了上述所有答案,发现它们都不起作用,这可能是我使用的是Windows 8并安装了Visual Studio 2012。在这种情况下,这就是你所做的。

vcvarsall.bat文件位于此处:C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC

只需选择文件并复制它。

然后转到此目录:C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools

并粘贴文件。然后,一切都应该很好。

我尝试了许多解决方案,但只有一个适合我,安装Microsoft Visual Studio2008 ExpressC++。

我在使用C编写的Python 2.7模块(yEnc,它在MS VS中存在其他问题)时遇到了这个问题。请注意,Python 2.7是使用MS VS 2008版本构建的,而不是2010!

尽管它是免费的,但由于MS正在推广VS 2010,因此很难找到。尽管如此,MSDN官方非常直接的链接仍在工作:检查https://stackoverflow.com/a/15319069/2227298下载链接。

猴子给出的答案是正确的答案之一,但它是不完整的。

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

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

为了完成他的回答,以下是步骤:

  1. 将ming w32的bin目录添加到环境变量中
  2. C:\Programs\MinGW\bin;C:\Programs\MinGW\msys\1.0\bin;附加到PATH
  3. 编辑(如果不存在则创建)位于C:\Python26\Lib\distutils\distutils.cfgdistutils.cfg文件:

    [build]compiler=mingw32

Make sure the environment variables is set by opening a new cmd.exe.

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

规定的解决方案是安装C/C++编译器,Microsoft VisualC++或MinGW(开源项目)。但是,安装和配置任一都非常困难。(编辑2014:Microsoft发布了Python 2.7的特殊C++编译器

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


如果您也认为“错误:无法找到vcvarsall.bat”是一个可笑的神秘和无益的消息,那么请在http://bugs.python.org/issue2943处评论bug,以用更有帮助和用户友好的消息替换它。

作为比较,Ruby附带了一个包管理器Gem,并提供了一个准官方的C/C++编译器DevKit。如果您尝试在没有它的情况下安装包,您会看到这条有用的友好有用消息:

请更新您的PATH以包含构建工具或从http://rubyinstaller.org/downloads下载DevKit并按照http://github.com/oneclick/rubyinstaller/wiki/Development-Kit的说明进行操作

您可以在https://stackoverflow.com/a/13445719/284795阅读有关Python打包的更长的咆哮

如果你想用Visual Studio编译C++而不是明…

  1. 运行python.exe以显示它是用哪个版本的VC++编译的(如下所示)。

    使用Python编译时使用的VisualC++编译器的相应版本是重要,因为distilutilsget_build_version防止混合版本(根据Piotr的警告)。

    • 黄色(顶部)是Python 2.7,使用MSC v.1500(Visual StudioC++2008)编译
    • 红色(底部)是Python 3.4.1,使用MSC v.1600(Visual StudioC++2010)编译

    命令行示例,显示使用MSC v.1500编译的Python 2.7和使用MSC v.1600编译的Python 3.4.1

  2. 使用下面的表[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)
  3. Download and install the corresponding version of Visual Studio C++ from the previous step.
    Additional notes for specific versions of VC++ are listed below.

    Notes for Visual Studio C++ 2008

    For only the 32-bit compilers, download Visual Studio C++ 2008 Express Edition.

    For the 64-bit compilers[2][3], download Windows SDK for Windows 7 and .NET Framework 3.5 SP1.

    • Uncheck everything except Developer Tools >> Visual C++ Compilers to save time and disk space from installing SDK tools you otherwise don't need.

    Notes for Visual Studio C++ 2010

    According to Microsoft, if you installed Visual Studio 2010 SP1, it may have removed the compilers and libraries for VC++.
    If that is the case, download Visual C++ 2010 SP1 Compiler Update.

    Notes for Visual Studio C++ 2015

    If you don't need the Visual Studio IDE, download Visual Studio C++ 2015 Build Tools.

    Notes for Visual Studio C++ 2017

    If you don't need the Visual Studio IDE, download Build Tools for Visual Studio 2017.

    Suggestion: If you have both a 32- and 64-bit Python installation, you may also want to use virtualenv to create separate Python environments so you can use one or the other at a time without messing with your path to choose which Python version to use.

According to @srodriguex, you may be able to skip manually loading the batch file (Steps 4-6) by instead copying a few batch files to where Python is searching by following this answer. If that doesn't work, here are the following steps that originally worked for me.

  1. Open up a cmd.exe

  2. Before you try installing something which requires C extensions, run the following batch file to load the VC++ compiler's environment into the session (i.e. environment variables, the path to the compiler, etc).

    Execute:

    • 32-bit Compilers:

      Note: 32-bit Windows installs will only have C:\Program Files\ as expected

      "C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat"

    • 64-bit Compilers:

      "C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\vsvars64.bat"

      Note: Yes, the native 64-bit compilers are in Program Files (x86). Don't ask me why.
      Additionally, if you are wondering what the difference between vcvars64.bat and vcvarsx86_amd64.bat or more importantly the difference between amd64 and x86_amd64, the former are for the native 64-bit compiler tools and the latter are the 64-bit cross compilers that can run on a 32-bit Windows installation.

    Update:
    If for some reason you are getting error: ... was unexpected at this time. where the ... is some series of characters, then you need to check that you path variable does not have any extraneous characters like extra quotations or stray characters. The batch file is not going to be able to update your session path if it can't make sense of it in the first place.

  3. If that went well, you should get one of the following messages depending on which version of VC++ and which command you ran:

    For the 32-bit compiler tools:
    Setting environment for using Microsoft Visual Studio 20xx x86 tools.

    For the 64-bit compiler tools:
    Setting environment for using Microsoft Visual Studio 20xx x64 tools.

  4. Now, run the setup via python setup.py install or pip install pkg-name

  5. Hope and cross your fingers that the planets are aligned correctly for VC++ to cooperate.

您可以从http://go.microsoft.com/?linkid=7729279下载免费的VisualC++2008 Express Edition,它将在安装过程中设置VS90COMNTOOLS环境变量,从而使用兼容的编译器构建。

正如@PiotrDobropost在评论中提到的,他对另一个问题的回答详细说明了为什么VisualC++2008是正确的构建方式,但随着Python的Windows构建迁移到较新版本的Visual Studio,这可能会发生变化:在Windows上为Python 2.7构建lxml

对于Python 3.4,依赖于Visual Studio 2010。安装VisualC++2010 Express为我解决了这个问题。

欺骗它使用VS 2008或2013安装,我碰巧没有工作。

你可以用easy_install而不是pip它对我有用。

您需要安装一个与用于构建Python的编译器兼容的Microsoft编译器。这意味着您需要VisualC++2008(或更新版本,带有一些调整)。

微软现在提供了一个捆绑的编译器和标头只是,以便能够以令人难忘的URL编译Python扩展:

适用于Python的Microsoft VisualC++编译器

http://aka.ms/vcpython27

这是一个相对较小的包;85MB下载,无需管理员权限即可安装,无需重新启动。名称有点误导,编译器适用于最初使用VisualC++2008编译的任何Python版本,而不仅仅是Python 2.7。

如果您启动Python交互式提示符或打印sys.version,请查找MSC版本字符串;如果是MSC v.1500,您可以使用此工具。

原始公告到distutils列表

微软已经发布了Python 2.7的编译器包,使人们更容易在Windows上构建和分发他们的C扩展模块。Python 2.7的Microsoft VisualC++编译器(又名VC9)可从以下网址获得:http://aka.ms/vcpython27

此软件包包含为Python 2.7 32位和64位构建C扩展模块所需的所有工具和标头(请注意,某些扩展模块需要第三方依赖项,例如OpenSSL或libxml2,不包括在内)。还支持使用VisualC++2008构建的其他Python版本,因此“Python 2.7”只是广告-它可以在2.6和3.2上正常工作。

请注意,您需要安装#0 6.0或更新(在下载页面的系统要求中列出)。您正在安装的项目必须使用setuptools.setup(),而不是distutils,否则自动检测将无法工作。

微软表示,他们希望保持URL稳定,以便自动化脚本可以轻松引用它。

我在使用Windows 7 x64上的Python 3.4.1时遇到了这个问题,不幸的是,我需要的包没有合适的exe或轮子,我可以使用。这个系统需要一些“变通方法”,下面(和TLDR在底部)详细说明。

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

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

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

但这不会为我安装,安装程序返回错误installation failed with return code 5100。我在以下链接找到了解决方案:http://support.microsoft.com/kb/2717426。简而言之,如果安装了较新版本的x86和x64 Microsoft VisualC++2010可再发行版本,它们与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,并修复了缺少的头文件。然后我手动创建了内容为CALL setenv /x64的vcvars64.bat。我将在此处粘贴所有这些说明,以免它们丢失。

步骤1是下载Visual Studio Express 2010。

http://www.microsoft.com/visualstudio/en-us/products/2010-editions/express是一个很好的起点。下载安装程序,并运行它(vc_web.exe)。您不需要SQL2008额外下载。

您还需要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”(您需要运行管理员:

调用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构建”或“setup.py安装”。

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


TLDR

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

我遇到了同样的错误(我发现它很愚蠢,并且在错误消息中没有任何帮助)并且继续遇到问题,尽管有一个可用的C编译器。

令人惊讶的是,最终对我有用的只是将pip和setupols升级到最新版本。希望这能帮助其他人。

查看您要安装的包的setup.py文件。如果是较旧的包,它可能会导入distutils.core.setup()而不是setuptools.setup()

我(在2015年)遇到了这些因素的组合:

  1. 适用于Python 2.7的Microsoft VisualC++编译器来自http://aka.ms/vcpython27

  2. 使用distutils.core.setup()的旧包

  3. 尝试做python setup.py build而不是使用pip

如果您使用最新版本的pip,它将强制(monkeypatch)包使用setupols,即使其setup.py调用distutils。然而,如果您不使用pip,而只是执行python setup.py build,构建过程将使用distutils.core.setup(),它不知道编译器安装位置。


解决方案

步骤1:打开相应的VisualC++2008命令提示符

打开开始菜单或开始屏幕,然后搜索“VisualC++2008 32位命令提示符”(如果您的python是32位)或“VisualC++2008 64位命令提示符”(如果您的python是64位)。运行它。命令提示符应在标题栏中显示VisualC++2008…。

步骤2:设置环境变量

在刚刚打开的命令提示符中设置这些环境变量。

SET DISTUTILS_USE_SDK=1SET MSSdk=1

参考http://bugs.python.org/issue23246

步骤3:构建和安装

cd到您要构建的包,然后运行python setup.py build,然后运行python setup.py install。如果您想安装到虚拟环境,请在构建之前激活它。

最快的解决方案

如果您有python3.4. x,解决方案就是安装VC++2010,因为它是用来编译自己的。

我的python版本是MSC v.1600 32 bit(intel)]on win32

在Windows8上运行良好

我花了将近2天的时间弄清楚如何在我的python 3.4 64位版本中解决这个问题:python 3.4.3(v3.4.3:9b73f1c3e601, Feb 24 2015,22:44:40)[MSC v.1600 64 bit(AMD64)]on win32

解决方案1,硬:(阅读本文之前,请阅读下面的第一个解决方案2)最后,这对我有帮助:

  1. 安装VisualC++2010 Express
  2. 安装适用于Windows 7的Microsoft Windows SDK v7.1
  3. C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64中手动创建文件vcvars64.bat,其中包含CALL "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64或其他路径,具体取决于您安装的位置
  4. (这似乎是可选的)安装微软Visual Studio 2010 Service Pack 1适用于Windows SDK 7.1的Microsoft VisualC++2010 Service Pack 1编译器更新一起
  5. 之后,我尝试pip install numpy,但收到以下错误:

    File "numpy\core\setup.py", line 686, in get_mathlib_inforaise RuntimeError("Broken toolchain: cannot link a simple C program")RuntimeError: Broken toolchain: cannot link a simple C program

    我在C:\Python34\Lib\distutils\msvc9compiler.py中将mfinfo更改为None/p>

  6. 最后在pip install numpy命令之后,我的avast防病毒软件试图干扰安装过程,但我很快就禁用了它

它花了很长时间-几分钟的numpy编译,我甚至认为有一个错误,但最后一切都好。

解决方案2,简单:(我知道这种方法已经在一个高度投票的回答中提到了,但让我重复一遍,因为它真的更容易)完成所有这些工作后,我明白对我来说最好的方法就是将来使用http://www.lfd.uci.edu/~gohlke/pythonlibs/中已经预编译的二进制文件。我很少有机会需要这个网站不包含的某个包(或包的版本)。这种方式的安装过程也快得多。例如,要安装numpy

  1. donwloadnumpy‑1.9.2+mkl‑cp34‑none‑win_amd64.whl(如果您有Python 3.4 64位)从该站点
  2. 在命令提示符或Powershell中使用pippip install numpy‑1.9.2+mkl‑cp34‑none‑win_amd64.whl安装它(或文件的完整路径,具体取决于打开命令提示符的方式)

点击这里:http://docs.continuum.io/anaconda/install.html#windows-install

有安装anaconda的说明,它将提供一个GUI和大多数似乎从http://www.scipy.org/开始导致此问题的软件包的静默安装。我知道这里https://www.microsoft.com/en-us/download/details.aspx?id=44266的2.7的解决方案,但我没有看到Python 3.4的选项。下载并安装Anaconda后,您应该能够从sipiy导入您需要的大部分软件包。

希望这能帮助一些人。我花了45分钟搜索帖子和网站。

编辑:只是想注意在操作系统符号旁边的GUI页面上有一个Python34链接。

如果你安装了ming w

pip install --global-option build_ext --global-option --compiler=mingw32 packagename

工作,迫使pip使用ming w编译器而不是Microsoft的编译器进行构建。有关详细信息,请参阅此处https://github.com/pypa/pip/issues/18(最后一篇文章)。

https://www.visualstudio.com安装Visual Studio 2015社区版,然后

对于python3.4

set VS100COMNTOOLS=%VS140COMNTOOLS% && pip install XX

我不知道是否为时已晚,但我发现适用于Python的Microsoft VisualC++编译器内容如下

如果您需要此编译器包,您将收到的典型错误消息是找不到vcvarsall.bat

希望这有帮助!

当我尝试在我的python 3.5上安装numpy库时遇到了这个问题。解决方案是安装VS2015。我有VS2008、2012、2013,其中没有一个与python 3.5兼容。显然较新版本的python依赖于较新版本的VS。

还要确保C++通用工具随Visual Studio一起安装。

在此处输入图片描述

Microsoft VisualC++Compiler for Python 2.7 athttp://www.microsoft.com/en-us/download/details.aspx?id=44266不是解决方案吗?

我想在Python 2.7下的Windows 10上运行pysph,vcvarsall.bat没有找到(来自distutils)

我的解决方案如下:

安装适用于Python 2.7的Microsoft VisualC++(如@Michael建议)

在Windows 10上,它被安装到(我的用户名是Andreas):

C:\Users\Andreas\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0

将环境变量VS90COMNTOOLS设置为VisualC++for Python 2.7的安装路径(参见上面的路径)。

如果还是不行,那就在模块里修改

C:/Python27/lib/distutils

文件msvc9compiler.py。在其中找到函数find_vcvarsall并进行以下修改。

替换该行:

productdir = os.path.join(toolsdir, os.pardir, os.pardir, "VC")

productdir = os.path.join(toolsdir)

这就是vcvarsall.bat所在的位置(检查vcvarsall.bat在安装中的位置)。

当我尝试在Windows 10中安装熊猫时,我也遇到了同样的错误。在搜索了几个解决方案后,我最终使用了轮子。

首先,将pip升级到最新版本:

easy_install install -U pip

二、安装轮子:

pip install wheel

第三,下载您的包的whl文件并安装它:

pip install [xxx].whl

到目前为止,我相信Wheer是在Windows上安装Python包的最佳方式。

在2016年解决这个问题的最简单方法是安装Chocolatey,然后安装vcpython27包。打开Powershell:

> iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))> choco install python2 -y> choco install vcpython27 -y

一个完整的MS V C++版本列表和安装变化官方支持#0(和一些由setuptools以及如何使用它们可以在

https://wiki.python.org/moin/WindowsCompilers

它还指定了哪个VC++版本需要哪个官方Win32 Python版本。请注意,MinGW不受官方支持(详见下文)。

简言之:

  • 对于每个版本,都有一个开箱即用的特定Visual Studio版本。
  • 对于独立SDK,通常需要从SDK提示符(=set环境变量)运行安装。
    • 对于某些人来说,这一要求可以通过一次性调整来解除,这不会产生不利的副作用
  • 一些不寻常的VC++版本由setuptools而不是distutils支持。
  • MinGW被称为“工作”,但仅适用于x86。https://bugs.python.org/issue4709表示其支持的问题在于MinGW本身和从Python 3.5开始,即使是x86也必然会出现问题。

我尝试了所有上述答案,但不为我工作。我使用的是Windows 10并安装了Visual Studio 2010在我的情况下,需要添加vcvars64.batC:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64

下面是vcvars64.bat:

CALL "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64

如果未安装,请安装Microsoft SDK 7.1,然后重新运行pip install dulwich

我遇到了同样的问题,目前已经解决了。

“Google”告诉我需要安装“Microsoft VisualC++Compiler for Python 2.7”。我不仅安装了该工具,还安装了VisualC++2008 Redit的可编辑版本,但没有帮助。然后我尝试安装VisualC++2008 Express Edition。问题已经消失了!

请尝试安装VisualC++2008 Express Edition!

从上面的链接安装适当的文件固定了我的问题。

参考:Jason Erickson[jerickso@stickpeople.com]。他为Windows用户很好地管理了这个页面。

我找到了一个更简单的方法来做到这一点。只需从网站下载二进制包:http://www.lfd.uci.edu/~gohlke/pythonlibs'例如:autopy3-0.51.1-cp36-cp36mwin32.whl(cp36表示Python 3.6)下载吧并通过pip安装文件的安装位置

调用import setuptools将修复distutils以强制与Visual Studio兼容。手动调用vcvars32.bat将设置虚拟环境并防止编译器抛出的其他常见错误。对于VS 2017,文件位于

"C:\Program Files(x86)\Microsoft VisualStudio\2017\社区\VC\辅助\构建\vcvars32.bat"

这是我用来快速编译. pyx文件到. pyd的安装脚本:(注:它使用第三方模块发送垃圾

# cython_setup.pyimport sys, os, time, platform, subprocessfrom setuptools import setup, find_packagesfrom Cython.Build import cythonizefrom traceback import format_exc
# USAGE:##   from cython_setup import run#   run(pyx_path)
# vcvars = r"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat"
# NOTE: to use visual studio 2017 you must have setuptools version 34+vcvars = r"C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars32.bat"

def _build_ext():try:pyx_path = sys.argv.pop(-1)pyx_path = os.path.abspath(pyx_path)if not os.path.exists(pyx_path):raise FileNotFoundError(f"{pyx_path} does not exist")project_name = sys.argv.pop(-1)os.chdir(os.path.abspath(os.path.dirname(pyx_path)))
print("cwd: %s" % os.getcwd())print(os.path.abspath("build"))setup(name=project_name,# cmdclass = {'build_ext': build_ext},packages=find_packages(),# ext_modules=cythonize(extensions)ext_modules=cythonize(pyx_path,compiler_directives={'language_level': 3, 'infer_types': True, 'binding': False},annotate=True),# include_dirs = [numpy.get_include()]build_dir=os.path.abspath("build"))except:input(format_exc())

def retry(func):def wrapper(*args, **kw):tries = 0while True:try:return func(*args, **kw)except Exception:tries += 1if tries > 4:raisetime.sleep(0.4)
return wrapper

@retrydef cleanup(pyx_path):from send2trash import send2trashc_file = os.path.splitext(pyx_path)[0] + ".c"if os.path.exists(c_file):os.remove(c_file)
if os.path.exists("build"):send2trash("build")

def move_pyd_files(pyx_path):pyx_dir = os.path.dirname(pyx_path)build_dir = os.path.join(pyx_dir, "build")if not os.path.exists(build_dir):raise RuntimeError(f"build_dir {build_dir} did not exist....")found_pyd = Falsefor top, dirs, nondirs in os.walk(build_dir):for name in nondirs:if name.lower().endswith(".pyd") or name.lower().endswith(".so"):found_pyd = Trueold_path = os.path.join(top, name)new_path = os.path.join(pyx_dir, name)if os.path.exists(new_path):print(f"removing {new_path}")os.remove(new_path)print(f"file created at {new_path}")os.rename(old_path, new_path)if not found_pyd:raise RuntimeError("Never found .pyd file to move")
def run(pyx_path):""":param pyx_path::type pyx_path::return: this function creates the batch file, which in turn calls this module, which calls cythonize, once donethe batch script deletes itself... I'm sure theres a less convoluted way of doing this, but it works:rtype:"""try:project_name = os.path.splitext(os.path.basename(pyx_path))[0]run_script(project_name, os.path.abspath(pyx_path))except:input(format_exc())

def run_script(project_name, pyx_path):dirname = os.path.dirname(pyx_path)# ------------------------------os.chdir(dirname)if os.path.exists(vcvars):#  raise RuntimeError(# f"Could not find vcvars32.bat at {vcvars}\nis Visual Studio Installed?\nIs setuptools version > 34?")subprocess.check_call(f'call "{vcvars}"', shell=True)
cmd = "python" if platform.system() == "Windows" else "python3"subprocess.check_call(f'{cmd} "{__file__}" build_ext "{project_name}" "{pyx_path}"', shell=True)move_pyd_files(pyx_path)cleanup(pyx_path)

if len(sys.argv) > 2:_build_ext()

下面的步骤为我修复了这个问题,我试图使用cython扩展创建设置。

  1. 安装适用于Python 2.7的Microsoft VisualC++编译器
  2. 默认安装位置是@C:\用户\PC用户\AppData\本地\程序\通用\微软\可视化C++对于Python,这实际上可能会解决问题,请在继续之前测试一次。
  3. 如果失败,检查VC++中的位置对于pythonvcvarsall.bat文件位于
  4. 打开msvc9compiler.py记事本中distutils包的文件。
  5. 在我的盒子里,这是@C:\Anaconda2\Lib\distutils\msvc9compiler.pyfind_vcvarsall函数在此文件中,通过打印版本来确定VC的版本参数。对于Python 2.7,它可能是9.0
  6. 现在创建一个环境变量VS90COMNTOOLS,指向C:\用户\PC用户\AppData\本地\程序\通用\微软\可视化C++对于Python\9.0\VC\bin
  7. 由于某种原因,distutils期望vcvarsall.bat文件在VC目录中,但VC++为python工具在9.0的根目录中有它要解决这个问题,请从path.join(约247行)

    #productdir=os.path.join(Toolsdir,os.pardir,os.pardir,"VC")os.path.join(工具目录,os.pardir,os.pardir)

上面的步骤为我解决了这个问题。

我没有看到任何使用vswhere的答案,我认为这是自Visual Studio 15.2以来的正确方法。

这是我如何运行vsvars64.bat(我想它类似于vsvarsall)

def init_vsvars():cprint("")cprint_header("Initializing vs vars")vswhere_path = r"%ProgramFiles(x86)%/Microsoft Visual Studio/Installer/vswhere.exe"vswhere_path = path.expandvars(vswhere_path)if not path.exists(vswhere_path):raise EnvironmentError("vswhere.exe not found at: %s", vswhere_path)
vs_path = common.run_process(".", vswhere_path,["-latest", "-property", "installationPath"])vs_path = vs_path.rstrip()
vsvars_path = os.path.join(vs_path, "VC/Auxiliary/Build/vcvars64.bat")# common.run_process(".", vsvars_path, [])os.system('"%s"' % vsvars_path)

run_process做了很多事情,但基本上可以归结为:

    output = ""process = subprocess.Popen(commandline,stdout=subprocess.PIPE,stderr=subprocess.STDOUT,universal_newlines=True)for stdout_line in iter(process.stdout.readline, ""):cprint(stdout_line)output += stdout_lineprocess.stdout.close()
return_code = process.wait()return output

这里给出了这个问题的最佳和详尽的答案:https://blogs.msdn.microsoft.com/pythonengineering/2016/04/11/unable-to-find-vcvarsall-bat/

在大多数情况下,为您所需的python依赖项找到合适的. whl包并使用pip安装它就足够了。

在最后一种情况下,您必须安装microsoft编译器并从源代码安装您的包。

使用此链接下载并安装VisualC++2015构建工具。它将自动下载visualcppbuildtools_full.exe并安装视觉C++14.0,而无需实际安装Visual Studio。安装完成后,重试pip install,您将不会再次收到错误。

我已经在以下平台和版本上进行了测试:

Python 3.6 on Windows 7 64-bitPython 3.7 on Windows Server 2016 (64-bit system)Python 3.8 on Windows 10 64-bit