【问题标题】:Cannot find vcvarsall.bat when running a Python script运行 Python 脚本时找不到 vcvarsall.bat
【发布时间】:2011-02-09 15:47:40
【问题描述】:

我正在开发 Vista,并使用 Python 2.6.4。我正在使用一个使用 Python 脚本的软件,但遇到了消息:

cannot find vcvarsall.bat

所以,我安装了 Visual c++ 2010。仍然找不到该文件 - 但是,它就在那里。我的猜测(一个非常未受过教育的......)是路径错误的地方,因为我还有一个旧的视觉 2008(相当空)文件夹。我不知道在哪里对新路径进行更改。我是否更改了注册表或脚本中的某些内容?还是别的地方?

【问题讨论】:

  • 这些解决方案是否适合您?不要忘记接受一个!
  • 从 Visual Studio 工具命令提示符(在您的开始菜单中)运行 python 或 pip install 命令通常可以解决编译任何 python 扩展的问题

标签: python visual-studio-2010


【解决方案1】:

我也遇到了这个错误 错误:需要 Microsoft Visual C++ 10.0(无法找到 vcvarsall.bat)。

我使用 .whl 文件进行安装。

C:\Users\Python\Python34\Scripts>pip install C:\Users\Downloads\Cython-0.28-cp34-cp34m-win_amd64.whl

此平台不支持 Cython-0.28-cp34-cp34m-win_amd64.whl。

将 .whl 文件中的 cp34m 重命名为 none,然后尝试。

C:\Users\Python\Python34\Scripts>pip install C:\Users\Downloads\Cython-0.28-cp34-none-win_amd64.whl

处理 c:\users\downloads\cython-0.28-cp34-none-win_amd64.whl

安装收集的包:Cython

成功安装 Cython-0.28

【讨论】:

    【解决方案2】:

    这是为 WINDOWS 用户提供的最新答案 - 非常简单的解决方案。

    正如其他人所指出的,问题在于 python/cython 等试图找到它们所构建的相同编译器,但计算机上不存在该编译器。大多数情况下,此编译器是 Visual Studio 的一个版本(2008、2010 或 2013),但要么未安装此类编译器,要么安装了较新版本且系统阻止安装较旧的编译器。所以,解决方法很简单:

    1) 查看 C:\Program Files (x86) 并查看是否安装了 Microsoft Visual Studio 版本,以及它是否比构建 Python 的版本更新。如果没有,请安装(/更新到)构建 Python 的版本(请参阅以前的答案),甚至是最新版本,然后执行下一步。

    2)如果已经安装了最新版本的 Microsoft Visual Studio,我们必须让 Python/cython 等相信它是构建它的版本。这很简单:转到系统环境变量并创建以下变量,如果它们不存在:

    VS100COMNTOOLS

    VS110COMNTOOLS

    VS120COMNTOOLS

    VS140COMNTOOLS

    并将这些变量的字段设置为

    “C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools”(如果安装了 Visual Studio 2008),或者 “C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools”(如果安装了 Visual Studio 2010)或 “C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools”(如果安装了 Visual Studio 2013)或 “C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools”(如果安装了 Visual Studio 2015)。

    此解决方案适用于 32 位版本的 python。它也可能适用于 64 位版本,但我没有测试过;最有可能的是,对于 64 位版本,必须执行以下附加步骤:

    3) 将路径“C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC”添加到 %PATH% 环境变量中(根据您的版本更改 Visual Studio 的版本号)。

    4) 从命令行运行“vcvarsall.bat x86_amd64”

    就是这样。

    【讨论】:

    • vcvarsall.bat x86_amd64 这个文件不存在,我有 Visual Studio 2015,其余的解释是完美的。帮助
    【解决方案3】:

    在 Windows 上有一个令人困惑的边缘情况。如果按照提示安装2007的windows,直接python setup.py install还是出现这个错误,那么可能是setup.py使用了旧版的安装工具。

    特别是,将 windows 指向安装 windows 编译器的正确位置的代码位于 setuptools 库的 __init__ 方法中,这意味着您必须在 setup.py 中使用 setuptools 模块。一些较旧的 setup.py 直接从distutils.core 调用方法。如果是这种情况,那么 setup.py 将永远找不到 Windows 安装的编译器。这可以通过简单地将 import setuptools 作为 setup.py 文件的第一行来解决。

    Reference: https://bugs.python.org/issue23246: 往下看一下 steve dower 的话:

    Setuptools 有查找编译器包的代码。我们故意把它放在那里而不是 distutils 以确保更多的人会得到它。 我可能应该将额外的检查移植到 2.7.10,但直接的解决方法是导入 setuptools。

    【讨论】:

      【解决方案4】:

      在 Windows 10 64 位上安装 Visual Studio Community 2015 Edition 之后。这个错误没有消失。然后我安装Microsoft Visual C++ Compiler for Python 2.7。因为它需要vcvarsall.bat 文件。该文件在 Visual Studio Community 2015 中没有,但在 Microsoft Visual C++ Compiler for Python 2.7 中。我还将它的路径添加到我的环境变量中,但它也不起作用。然后我卸载了python 3.4.2并删除了python的所有文件夹,并安装了python 2.7。最后,我使用 powershell 运行 pip,我能够安装我需要的包,即 flask-user,通过使用。

      pip install flask-user
      

      【讨论】:

        【解决方案5】:

        在尝试了每个线程上可用的所有选项后,我决定深入研究源代码以找到解决方案。

        编辑您的$PythonPath/Lib/distutils/_msvccompiler.py

        查找def _find_vcvarsall(plat_spec): 添加为下一行,添加

            PathToVC=r"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"
            return PathToVC, r""
        

        然后确保你的 Visual Studio bin 目录在你的路径中。

        如果这不起作用,您可能需要编辑其他文件,包括:

        • $PythonPath/Lib/distutils/msvc9compiler.py
        • $PythonPath/Lib/site-packages/setuptools/msvc9_support.py

        【讨论】:

          【解决方案6】:

          如果您通过快速安装安装了 Visual Studio 2015,则 vcvarsall.bat 不存在。但是你可以去programm and fonctionalities,修改安装来安装c++工具,然后vcvarsall.bat就会出现。

          【讨论】:

          • 要详细说明,您需要在安装向导的下拉列表中找到它。 .bat 文件不存在!
          【解决方案7】:

          这个神秘的错误意味着您没有安装 C 编译器。 There was a discussion to propose a more explanative error(其中is continued here,如果你关心它,请注册并评论!)但目前它仍然没有实现。

          要解决此问题,您可以安装大约需要 1 GB 的 Visual Studio 2008 SDK,或者您可以安装非常小的 VCForPython27.msi,但目前 distutils 不太支持,步骤如下:

          1) install Microsoft Visual C++ Compiler for Python 2.7 from
          http://www.microsoft.com/en-us/download/details.aspx?id=44266
          2) Enter MSVC for Python command prompt
          3) SET DISTUTILS_USE_SDK=1
          4) SET MSSdk=1
          5) you can then build your C extensions: python.exe setup.py ...
          

          在构建您的 C 扩展之前,每次都必须重复第 2 步到第 4 步。这是因为 VCForPython27.msi 存在问题,它将头文件和 vcvarsall.bat 安装在与 VS2008 SDK 布局不同的文件夹中,从而混淆了 distutils 的编译器检测。这将在 Python 2.7.10 的 setuptools 中得到修复。

          Gregory Szorc 的错误报告和解决方法: http://bugs.python.org/issue23246

          更多信息和在 IPython 中使用 %%cython 魔法的解决方法:https://github.com/cython/cython/wiki/CythonExtensionsOnWindows

          /编辑: 此外,如果您有其他版本的 Python,则无法使用 Microsoft Visual C++ for Python 2.7,这是 Microsoft 专门为 Python 2.7 制作的一种迷你编译器。在这种情况下,您需要安装与您的 Python 版本匹配的 Visual Studio SDK,或具有正确 NET 框架版本的 Windows SDK。有关更多信息,请参见此处: https://github.com/cython/cython/wiki/CythonExtensionsOnWindows#using-windows-sdk-cc-compiler-works-for-all-python-versions

          【讨论】:

          • 嗨,gaborous,您能否提供更多关于第 2 步的详细信息?我在哪里可以找到该命令提示符?谢谢
          • @Giswok 这是随“Microsoft Visual C++ Compiler for Python”一起安装的,你应该在开始菜单中找到一个快捷方式。
          • 感谢@gaborous,我一开始没找到,因为它没有出现在开始菜单搜索栏中!这似乎取得了一些进展;我现在收到fatal error LNK1117: syntax error in option `MANIFEST:EMBED,ID=2。不确定这是否是因为 distutils 或不相关的东西不支持它。我会继续努力的。
          • @Giswok 这是一个奇怪的错误,我从来没有遇到过。尝试以管理员身份运行提示,如果这不起作用,那么您可能不得不尝试从头开始重新安装整个 Python + C++ 编译器 :( 还要确保您有 Python 2.7,这个编译器没有不适用于任何其他版本的 Python。
          • @glaborous 是的,就是这样 - 我正在运行 Python 3.5。我希望它可能仍然有效,因为还没有其他任何东西!还是谢谢。
          【解决方案8】:

          如果有人来这里寻找 Python 3.5 的答案;你需要 Visual Studio 2015。

          在此处获取 Visual Studio 2015 社区:https://www.visualstudio.com/en-us/downloads/visual-studio-2015-downloads-vs.aspx,这对我有用,无需进一步的步骤。

          非常感谢 Ionel,显然是网络上唯一可以找到此信息的地方! http://blog.ionelmc.ro/2014/12/21/compiling-python-extensions-on-windows/

          【讨论】:

            【解决方案9】:

            这是一个简单的解决方案。我正在使用 Python 2.7 和 Windows 7。

            您尝试安装的内容需要 C/C++ 编译器,但 Python 没有找到它。很多 Python 包实际上是用 C/C++ 编写的,需要编译。 vcvarsall.bat 是编译 C++ 所必需的,而 pip 假设您的机器可以做到这一点。

            1. 尝试先升级 setuptools,因为 v6.0 及以上版本会自动检测编译器。你可能已经有一个编译器,但 Python 找不到它。打开命令行并输入:

              pip install --upgrade setuptools

            2. 现在再次尝试安装您的软件包:

              pip install [yourpackagename]

            3. 如果这不起作用,那么可以肯定你没有编译器,所以你需要安装一个:
              http://www.microsoft.com/en-us/download/details.aspx?id=44266

            4. 现在再试一次:

              pip install [yourpackagename]

            然后就可以了。它应该适合你。

            【讨论】:

            • pip install --upgrade setuptools 也解决了我的问题(无法在 jetbrains pycharm 中安装多个软件包),从 Windows 7 中的“C:\Python27\Scripts”运行
            • 这是一个比我在其他地方看到的建议更简单的解决方案 - 没有搞乱视觉工作室。谢谢。
            • 对我没用...同样的错误。我已经安装了 VS2010 和 VS2013
            • @IceFire,我的解决方案从未声称是涉及 Visual Studio 的解决方案,因此您拥有的版本与我无关。令人惊讶的是,您对答案投了反对票,因为它在您的特定情况下不起作用。也许您有一些更深层次的潜在技术问题需要处理。这就像你来找医生抱怨头痛并在你真的感冒时给你扑热息痛时生气。
            • 无论如何都必须涉及VS,当您使用vcvarsall.bat时,整个与Python相关的问题都是基于依赖于该文件。我拥有 VS10/13 的信息只是额外的。有一个问题,你的解决方案在我的情况下没有帮助。我不赞成这样的答案,以便在更广泛的案例中起作用的答案更快地达到顶峰......没有人身侮辱的意图:)
            【解决方案10】:

            从此处安装 Visual Studio Express 2008 (9.0):http://go.microsoft.com/?linkid=7729279

            这就是为我解决的问题。

            【讨论】:

              【解决方案11】:

              请注意,有一个非常简单的解决方案。

              1. http://www.microsoft.com/en-us/download/details.aspx?id=44266下载软件并安装。

              2. 找到安装目录,类似于“C:\Users\USER_NAME\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python”

              3. 更改目录名称“C:\Users\USER_NAME\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0” 到 "C:\Users\USER_NAME\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\VC"

              4. 添加一个新的环境变量“VS90COMNTOOLS”,其值为“C:\Users\USER_NAME\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\VC\VC”

              现在一切正常。

              【讨论】:

                【解决方案12】:

                2015 中,如果您仍然遇到这个令人困惑的错误,责怪 PIP 使用的 python 默认设置工具

                1. http://www.microsoft.com/en-in/download/details.aspx?id=44266 下载并安装编译 python 2.7 模块所需的最小 Microsoft Visual C++ Compiler for Python 2.7
                2. 更新您的设置工具 - pip install -U setuptools
                3. 安装任何需要 C 编译的 python 包。 pip install blahblah

                它会正常工作的。

                更新:它不适用于所有库。我仍然遇到一些需要 lib-headers 的模块的错误。他们唯一能完美运行的就是 Linux 平台

                【讨论】:

                • 我同意,Python 仍然不能更好地支持 C/C++ 扩展的编译,这太可怕了,尽管需要安装很多扩展。
                • 这和我写的一样!
                • 你逐渐改进了你的答案。要我删除我的答案吗?
                • 感谢您提供的信息 - 不幸的是,我仍然无法让它工作,因为 setuptools 抱怨“无法从不存在的文件中删除条目” - 所以我无法更新它。我安装了四个不同版本的 Visual Studio(包括 2008 和 2010),以及用于 Python 的 MS Visual C++ 编译器,但仍然出现相同的错误。奇怪的是,这竟然如此困难,它只是一个c编译器!不管怎样,接下来我会尝试 MinGW,然后我的头可能会穿过一堵砖墙。
                【解决方案13】:

                我在这里尝试了通过命令行设置环境变量的解决方案,但这不起作用。我是从常规命令提示符和 Visual Studio Developer 命令提示符执行此操作的。

                我可以这样解决这个问题:

                1. 转到环境变量屏幕并在那里创建一个新变量 VS100COMNTOOLS 并让它指向我的 Visual Studio 安装文件夹 C:\Program Files\Microsoft Visual Studio 12.0\Common7\Tools\
                2. 转到上述文件夹。在这个文件夹中有文件 vsvars32.bat。复制此文件并将其重命名为 vsvarsall.bat

                我的配置是 Visual Studio 2013 (12.0) 和 Python 3.4.2

                【讨论】:

                  【解决方案14】:

                  看起来 MS 已经发布了所需的确切软件包 here。烧比特here。安装它,然后将this answer中的注册表项设置为指向C:\Users\username\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0

                  【讨论】:

                    【解决方案15】:

                    似乎 Python 正在明确寻找 Visual Studio 2008。我遇到了这个问题,即使它在路径上,它也找不到 vcvarsall.bat。

                    事实证明,Visual Studio 2010 创建了以下环境变量:

                    SET VS100COMNTOOLS=C:\Program Files\Microsoft Visual Studio 10.0\Common7\Tools\
                    

                    解决方法是创建一个名为 VS90COMNTOOLS 的变量并将其指向您的 Visual Studio 2010 常用工具文件夹,例如

                    SET VS90COMNTOOLS=C:\Program Files\Microsoft Visual Studio 10.0\Common7\Tools\
                    

                    这为我解决了这个问题,我现在可以使用 Visual Studio 2010 编译器构建包。

                    您还可以使用以下命令将 VS90 环境变量设置为指向 VS100 环境变量:

                    SET VS90COMNTOOLS=%VS100COMNTOOLS%
                    

                    【讨论】:

                    • Windows 的官方 Python 版本是使用 Visual Studio 2008 构建的,通过查看源代码,它明确查找 VS90COMNTOOLS。 VS10COMNTOOLS 是由 Visual Studio 安装程序创建的,所以请随意处理与 Microsoft 的一致性问题 :)
                    • 奇怪,我的 Visual Studio 2010 安装程序创建了 VS100COMNTOOLS
                    • 尽管如此,但这不是问题。它不是 Python 寻找的环境变量,因此您需要创建相关的环境变量(即 VS90COMNTOOLS)并将其指向您的 VS 2010 常用工具文件夹。
                    • 在我的 vs2012 安装中,VCVARSALL.BAT 位于 C:\Program Files\Microsoft Visual Studio 11.0\VC 而不是上述位置。我将它包含在路径中,它似乎可以工作。
                    • 我现在也有这个问题,因为我没有 Visual Studio 11.0 文件夹,并且由于有较新版本的 VS2013 而无法安装。将 VS110 指向较新的版本绝对可以吗?这里没有缺点吗?另外为什么要明确寻找VS110,这是不是很糟糕的设置?即它应该寻找最新的而不是特定的?
                    【解决方案16】:

                    这对我有用(python 2.6):

                    http://www.microsoft.com/visualstudio/en-us/products/2008-editions/express安装free ms visual studio 2008

                    vcvarsall.bat"C:\Program Files\Microsoft Visual Studio 9.0\VC>"复制到"C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\"

                    安装程序已经设置了这个环境变量:

                    VS90COMNTOOLS=C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\
                    

                    【讨论】:

                      【解决方案17】:

                      解决这个问题的方法是设置如下环境变量:

                      VS90COMNTOOLS
                      

                      例如:

                      set VS90COMNTOOLS=C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools
                      

                      此错误可能是由于安装 Visual Studios 后未重新启动,或安装后未启动新的命令提示符所致。

                      此外,您可用于编译扩展的 Visual Studio 版本可能取决于您构建的 Python 版本。

                      【讨论】:

                      • 是的,虽然上面的路径问题似乎很可能,但这个问题在没有重新启动的情况下解决了问题。不错的一个
                      • +1 用于提及“安装后启动新的命令提示符”。这是我的问题的原因:)
                      【解决方案18】:

                      安装 Visual C++ 是很好的第一步,但我不能肯定说 2010 版是否可以工作。还是试试吧。

                      在 Visual C++ 安装目录中查找 vcvarsall.bat(对于 Visual Studio 2010,它位于 ProgramFiles\Microsoft Visual Studio 10.0\VC 中)。然后将该目录添加到系统路径。如果您在命令行上执行此操作,您可以尝试:

                      path %path%;c:\path\to\vs2010\bin
                      

                      然后再次尝试运行您尝试运行的任何内容。

                      要获得更持久的效果,请add it in the computer system path settings

                      【讨论】:

                      • 您好,感谢您的意见。实际起作用的是删除 2010 版本并安装 2008 版本。改变路径不起作用。再次感谢
                      • 很高兴听到您已经成功了。我敢肯定,大师们将来会解释如何使用 VS 2010 编译 Python 及其模块。
                      • Python 2.6, 2.7, 3.0, 3.1 将始终需要 VS2008,因为它包含它们链接到的 C 运行时的正确版本。如果你尝试将 python DLL 链接到 VS2010 附带的 C 运行时,它将无法正常工作。
                      • @JonathanHartley,您能否提供参考,以便我们查找更多详细信息?例如。我很好奇这对于没有 VS2008 的平台(例如 Linux)是如何工作的。
                      • 嘿@LarsH。在 Python 开发指南中:[docs.python.org/devguide/setup.html#windows]。 Windows 以外的平台可以使用任何 C89 或 C99 兼容的编译器,gcc 很好。
                      猜你喜欢
                      • 2015-03-30
                      • 2018-03-31
                      • 2012-08-07
                      • 2016-04-07
                      • 2020-11-04
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2015-12-26
                      相关资源
                      最近更新 更多