870

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

42 回答 42

685

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


对于 Windows 安装:

在运行 setup.py 进行包安装时,Python 2.7 会搜索已安装的 Visual Studio 2008。您可以VS90COMNTOOLS在调用setup.py.

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

  • 视觉工作室 2010 (VS10):SET VS90COMNTOOLS=%VS100COMNTOOLS%
  • 视觉工作室 2012 (VS11):SET VS90COMNTOOLS=%VS110COMNTOOLS%
  • 视觉工作室 2013 (VS12):SET VS90COMNTOOLS=%VS120COMNTOOLS%
  • 视觉工作室 2015 (VS14):SET VS90COMNTOOLS=%VS140COMNTOOLS%

警告:如下所述,如果您尝试编译 python 模块,则此答案不太可能起作用。

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

于 2012-05-11T20:39:57.920 回答
225

我找到了解决方案。我有完全相同的问题和错误,安装'amara'。我安装了 mingw32,但需要配置 distutils。

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

    [build]
    compiler=mingw32
    
  5. 现在运行easy_install.exe amara

通过打开一个新的cmd.exe.

于 2010-05-15T03:37:31.223 回答
220

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

于 2011-05-12T19:55:38.327 回答
168

如果你想用 Visual Studio C++ 而不是 mingw 编译...

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

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

    • 黄色(顶部)是 Python 2.7,使用 MSC v.1500 (Visual Studio C++ 2008) 编译
    • 红色(底部)是 Python 3.4.1,使用 MSC v.1600 (Visual Studio C++ 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.x        
    MSC v.1100 -> Visual C++ 5          
    MSC v.1200 -> Visual C++ 6          
    MSC v.1300 -> Visual C++ .NET       
    MSC v.1310 -> Visual C++ .NET 2003  
    MSC 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. 从上一步下载并安装相应版本的 Visual Studio C++。
    下面列出了特定版本的 VC++ 的附加说明。

    Visual Studio C++ 2008 注释

    对于32 位编译器,请下载Visual Studio C++ 2008 Express Edition

    对于 64 位编译器[2] [3],请下载适用于 Windows 7 和 .NET Framework 3.5 SP1 的 Windows SDK

    • 取消选中所有内容,除了Developer Tools >> Visual C++ Compilers节省安装您不需要的 SDK 工具的时间和磁盘空间。

    Visual Studio C++ 2010 的注意事项

    根据微软的说法,如果你安装了 Visual Studio 2010 SP1,它可能已经删除了 VC++ 的编译器和库。
    如果是这种情况,请下载Visual C++ 2010 SP1 编译器更新

    Visual Studio C++ 2015 注释

    如果您不需要 Visual Studio IDE,请下载Visual Studio C++ 2015 Build Tools

    Visual Studio C++ 2017 的注意事项

    如果您不需要 Visual Studio IDE,请下载Build Tools for Visual Studio 2017

    建议:如果您同时安装了 32 位和 64 位 Python,您可能还想使用virtualenv创建单独的 Python 环境,这样您就可以一次使用一个或另一个,而不会弄乱选择哪个 Python 版本的路径利用。

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

  1. 打开一个cmd.exe

  2. 尝试安装需要 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 位编译器位于Program Files (x86). 不要问我为什么。
      此外,如果您想知道 and 之间的区别vcvars64.bat或者更重要的是和vcvarsx86_amd64.bat之间的区别,前者适用于本机 64 位编译器工具,后者是可在 32 位 Windows 安装上运行的 64 位交叉编译器.amd64x86_amd64

    更新:
    如果由于某种原因你得到error: ... was unexpected at this time....一些字符系列,那么你需要检查你的路径变量没有任何无关的字符,比如额外的引号或杂散字符。如果批处理文件一开始就无法理解它,它将无法更新您的会话路径。

  3. 如果一切顺利,您应该会收到以下消息之一,具体取决于您运行的 VC++ 版本和命令:

    对于 32 位编译器工具:
    Setting environment for using Microsoft Visual Studio 20xx x86 tools.

    对于 64 位编译器工具:
    Setting environment for using Microsoft Visual Studio 20xx x64 tools.

  4. 现在,通过python setup.py install或运行设置pip install pkg-name

  5. 希望并祈祷行星正确对齐,以便 VC++ 进行合作。

于 2013-08-04T16:48:35.460 回答
73

这是怎么回事?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++ 编译器)

最简单的解决方案是将 Christoph Gohlke 的 Windows 安装程序 (.msi) 用于流行的 Python 包。他为 Python 2.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 以包含构建工具或从http://rubyinstaller.org/downloads下载 DevKit并按照http://github.com/oneclick/rubyinstaller/wiki/Development-Kit上的说明进行操作

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

于 2013-08-02T13:48:46.270 回答
64

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

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

适用于 Python 2.7 的 Microsoft Visual C++ 编译器

http://aka.ms/vcpython27

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

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

最初的公告到 distutils 列表

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

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

请注意,您需要安装setuptools6.0 或更高版本(在下载页面的系统要求中列出)。您正在安装的项目必须使用setuptools.setup()distutils否则自动检测将不起作用。

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

于 2014-09-30T18:23:08.170 回答
55

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

我在 Windows 7 框中有 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 的所有实例。” (从这里

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

于 2012-05-08T15:31:47.713 回答
23

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

python setup.py install -c mingw32
于 2010-05-12T10:44:21.987 回答
20

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

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

    [build]
    compiler=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))
于 2013-03-30T13:00:56.277 回答
15

查看setup.py您尝试安装的软件包的文件。如果它是一个较旧的包,它可能正在导入distutils.core.setup()而不是setuptools.setup().

我在 2015 年遇到了这个问题,结合了以下因素:

  1. 来自http://aka.ms/vcpython27的 Microsoft Visual C++ Compiler for Python 2.7

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

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

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


解决方案

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

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

第二步:设置环境变量

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

SET DISTUTILS_USE_SDK=1
SET MSSdk=1

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

第 3 步:构建和安装

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

于 2015-02-19T22:00:53.700 回答
9

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

set VS90COMNTOOLS=%VS80COMNTOOLS%

然后:

python.exe setup.py install
于 2013-04-05T11:20:39.063 回答
8

我花了将近 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 )] 在win32上

解决方案1,很难:(在阅读本文之前,请先阅读下面的解决方案2)最后,这对我有帮助:

  1. 安装Visual C++ 2010 速成版
  2. 为 Windows 7安装Microsoft Windows SDK v7.1
  3. 根据您的安装位置,手动创建包含或其他路径vcvars64.bat的文件C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64CALL "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64
  4. (这似乎是可选的)为 Windows SDK 7.1安装Microsoft Visual Studio 2010 Service Pack 1和Microsoft Visual C++ 2010 Service Pack 1 编译器更新
  5. 之后我尝试pip install numpy但收到以下错误:

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

    我根据这个https://stackoverflow.com/a/23099820/4383472mfinfo更改为NoneC:\Python34\Lib\distutils\msvc9compiler.py

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

花了很长时间——numpy编译好几分钟,我什至认为有错误,但最后一切正常。

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

  1. 从该站点下载numpy‑1.9.2+mkl‑cp34‑none‑win_amd64.whl(如果您有 Python 3.4 64 位)
  2. 在命令提示符或 powershell 中使用 pip 安装它pip install numpy‑1.9.2+mkl‑cp34‑none‑win_amd64.whl(或文件的完整路径,具体取决于命令提示符的打开方式)
于 2015-03-15T15:08:11.117 回答
7

当我尝试在我的 python 3.5 上安装 numpy 库时遇到了这个问题。解决办法是安装VS2015。我有 VS2008、2012、2013,它们都不兼容 python 3.5。显然,较新版本的 python 依赖于较新版本的 VS。

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

在此处输入图像描述

于 2015-10-30T20:25:16.820 回答
7

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

我的解决方案如下:

为 Python 2.7 安装 Microsoft Visual C++(如@Michael 建议的那样)

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

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

将环境变量VS90COMNTOOLS设置为 Visual C++ 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 在您的安装中的位置)。

于 2015-12-08T09:48:12.540 回答
6

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

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

vcvarsall.bat 现在存在,但安装包时出现新错误,query_vcvarsall raise ValueError(str(list(result.keys())))ValueError: [u'path']. 此错误还有其他 stackoverflow 问题,例如Errors while building/installing C module for Python 2.7

我从那个答案确定 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 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”(您需要以管理员身份运行):

调用 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。最后,成功!


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. Start->All Programs->Microsoft Windows SDK v7.1 ->Windows SDK 7.1 Command Prompt 打开特殊的 x64 命令提示符,然后可以与 python/easy_install/pip/etc 一起使用(包括 virtual_envs 中的那些)。
于 2014-11-20T07:14:23.257 回答
6

您可以从http://go.microsoft.com/?linkid=7729279下载免费的 Visual C++ 2008 Express Edition ,它将在安装期间设置 VS90COMNTOOLS 环境变量,因此使用兼容的编译器进行构建。

正如@PiotrDobrogost 在评论中提到的那样,他对另一个问题的回答详细说明了为什么使用 Visual C++ 2008 是正确的构建工具,但是随着 Python 的 Windows 构建迁移到较新版本的 Visual Studio,这种情况可能会发生变化:Building lxml适用于 Windows 上的 Python 2.7

于 2014-01-21T23:43:47.923 回答
6

我尝试了以上所有答案,发现它们都不起作用,这可能是我使用的是 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

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

于 2013-06-12T12:09:08.810 回答
6

使用此链接下载并安装Visual C++ 2015 Build Tools。它将自动下载visualcppbuildtools_full.exe并安装Visual C++ 14.0,而无需实际安装 Visual Studio。安装完成后重试 pip install 就不会再报错了。

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

Python 3.6 on Windows 7 64-bit
Python 3.7 on Windows Server 2016 (64-bit system)
Python 3.8 on Windows 10 64-bit
于 2020-02-25T14:16:18.663 回答
4

以下步骤为我解决了这个问题,我正在尝试使用 cython 扩展创建设置。

  1. 为 Python 2.7 安装 Microsoft Visual C++ 编译器
  2. 默认安装位置是@ C:\Users\PC-user\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python 这实际上可能会解决问题,在继续之前测试一次。
  3. 如果失败,请检查 VC++ for python vcvarsall.bat 文件的位置
  4. 在记事本中打开 distutils 包的 msvc9compiler.py 文件。
  5. 在我的盒子里这是@ C:\Anaconda2\Lib\distutils\msvc9compiler.py find_vcvarsall 函数在这个文件中,通过打印出版本参数来确定VC的版本。对于 Python 2.7,它可能是 9.0
  6. 现在创建一个环境变量 VS90COMNTOOLS,指向 C:\Users\PC-user\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\bin
  7. 出于某种原因,distutils 期望 vcvarsall.bat 文件位于 VC 目录中,但用于 python 工具的 VC++ 将它放在 9.0 的根目录中。要解决此问题,请从 path.join 中删除“VC”(大约在第 247 行左右)

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

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

于 2017-12-11T07:14:26.893 回答
4

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

“C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat”

这是我用来快速将 .pyx 文件编译为 .pyd 的设置脚本:(注意:它使用 3rd 方模块 send2trash

# cython_setup.py
import sys, os, time, platform, subprocess
from setuptools import setup, find_packages
from Cython.Build import cythonize
from 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 = 0
        while True:
            try:
                return func(*args, **kw)
            except Exception:
                tries += 1
                if tries > 4:
                    raise
                time.sleep(0.4)

    return wrapper


@retry
def cleanup(pyx_path):
    from send2trash import send2trash
    c_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 = False
    for top, dirs, nondirs in os.walk(build_dir):
        for name in nondirs:
            if name.lower().endswith(".pyd") or name.lower().endswith(".so"):
                found_pyd = True
                old_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 done
    the 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()
于 2017-06-10T16:18:27.780 回答
3

我尝试了许多解决方案,但只有一个对我有用,即安装 Microsoft Visual Studio 2008 Express C++。

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

尽管它是免费的,但由于 MS 正在推广 VS 2010,因此很难找到它。不过,MSDN 官方非常直接的链接仍然有效:请查看https://stackoverflow.com/a/15319069/2227298以获取下载链接。

于 2013-06-23T21:40:48.740 回答
3

如果你安装了 mingw

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

有效,迫使 pip 使用 mingw 编译器而不是微软的编译器来构建。有关详细信息,请参见此处https://github.com/pypa/pip/issues/18(最后一篇文章)。

于 2015-05-21T21:40:23.447 回答
3

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

> iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))
> choco install python2 -y
> choco install vcpython27 -y
于 2016-02-18T14:51:10.253 回答
3

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

于 2015-11-26T13:04:37.537 回答
2

一份详尽的 MS VС++ 版本和安装变体的列表(以及一些官方支持的distutilssetuptools以及如何使用它们可以在以下位置找到

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

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

简单来说:

  • 对于每个版本,都有一个开箱即用的特定 Visual Studio 版本。
  • 对于独立 SDK,通常需要从 SDK 提示符运行安装(=设置环境变量)。
    • 对于某些人来说,这一要求可以通过没有不利副作用的一次性调整来解除
  • setuptools一些不寻常的 VC++ 版本由distutils.
  • 据说MinGW可以“工作”,但仅适用于 x86。 https://bugs.python.org/issue4709说它的支持问题在于 MinGW 本身,甚至 x86 自 Python 3.5 以来也必然会出现问题。
于 2016-04-11T20:03:03.880 回答
2

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

“Google”告诉我需要安装“Microsoft Visual C++ Compiler for Python 2.7”。我不仅安装了该工具,还安装了 Visual C++ 2008 Reditributable,但它没有帮助。然后我尝试安装 Visual C++ 2008 Express Edition。而且问题已经解决了!

只需尝试安装 Visual C++ 2008 Express Edition!

于 2016-06-27T12:01:37.190 回答
2

我不知道是否为时已晚,但我发现Microsoft Visual C++ Compiler for Python 2.7显示为

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

希望这可以帮助!

于 2015-10-15T19:32:51.493 回答
1

尽管有可用的 C 编译器,但我也遇到了同样的错误(我觉得这很愚蠢,而且没有任何帮助,因为错误消息没有任何帮助)并且继续遇到问题。

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

于 2014-12-19T19:16:10.597 回答
1

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

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

于 2014-03-26T10:57:05.173 回答
1

最快的解决方案

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

https://www.visualstudio.com/en-us/downloads#d-2010-express

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

在 Windows8 上运行良好

于 2015-03-06T22:45:34.170 回答
1

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

于 2014-09-09T20:22:14.047 回答
1

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

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

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

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

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

    [build]
    compiler=mingw32
    

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

于 2013-07-28T04:23:28.053 回答
1

如果您希望在没有安装 Visual Studio 的 Windows 机器上安装 pyodbc,另一种选择是使用二进制分发版手动安装 pyodbc。

如果您在正在使用的机器上没有管理员权限并尝试设置virtualenv ,这将特别有用。

脚步:

  1. 从此处下载最新的 Windows 安装程序(pyodbc-XXXwin-Y-py2.7.exe)
  2. 使用 7-Zip(或 WinRAR 或其他)打开安装程序可执行文件
  3. 提取 pyodbc.pyd 和 pyodbc-XXX-py2.7.egg-info 并放入[python installation directory or virtualenv]\Lib\site-packages
  4. 没有第4步:)
于 2013-05-23T14:34:42.800 回答
1

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

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

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

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

于 2015-05-12T01:08:20.253 回答
1

从https://www.visualstudio.com安装 Visual Studio 2015 Community Edition ,然后

对于 Python 3.4

set VS100COMNTOOLS=%VS140COMNTOOLS% && pip install XX

于 2015-08-20T16:55:04.257 回答
1

我尝试了上述所有答案,但对我不起作用。我使用的是 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

于 2016-06-16T07:57:31.010 回答
0

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

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

easy_install install -U pip

二、安装轮子:

pip install wheel

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

pip install [xxx].whl

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

于 2016-01-26T18:26:14.797 回答
0

http://www.stickpeople.com/projects/python/win-psycopg/

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

提及:杰森·埃里克森 [jerickso@stickpeople.com]。他为 Windows 用户很好地管理了这个页面。

于 2016-07-20T09:39:47.290 回答
-1

我没有看到任何使用 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_line
    process.stdout.close()

    return_code = process.wait()
    return output
于 2018-05-01T08:41:40.367 回答
-1

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

于 2017-04-28T05:02:11.947 回答
-2

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

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

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

于 2018-05-26T18:15:09.703 回答