【问题标题】:pip install gives error: Unable to find vcvarsall.batpip install 给出错误:无法找到 vcvarsall.bat
【发布时间】:2025-11-30 18:25:02
【问题描述】:

在带有 Python 2.7 的 Windows 8 上使用 pip install zipline 会出现错误:

Downloading/unpacking six (from python-dateutil==2.1->delorean->zipline[all])
  Running setup.py egg_info for package six

Installing collected packages: blist, pytz, requests, python-dateutil, six
  Running setup.py install for blist
    building '_blist' extension
    error: Unable to find vcvarsall.bat
    Complete output from command C:\Python27\python.exe -c "import setuptools;__
file__='c:\\users\\ThatsMe\\appdata\\local\\temp\\pip-build-ThatsMe\\blist\\setup.py';ex
ec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" inst
all --record c:\users\ThatsMe\appdata\local\temp\pip-xvoky2-record\install-record.tx
t --single-version-externally-managed:

running install

running build

running build_py

running build_ext

building '_blist' extension

error: Unable to find vcvarsall.bat

问题:如何解决错误?运行pip install zipline[all] 会出现同样的错误...

【问题讨论】:

  • 你可以在这个帖子上找到答案:*.com/questions/2817869/…
  • @Baart 那是 Python 2.6
  • 安装 gcc 或 Microsoft Visual Express Studio 并按照 Baart 提到的链接上的解决方案,它们适用于 win8 和 py2.7。我使用codeblocks 安装gcc。
  • 答案在此链接*.com/a/20695951/3121410享受!

标签: python python-2.7 pip zipline


【解决方案1】:

如果您在 Python 2.7 上遇到此错误,您现在可以单独下载 Microsoft Visual C++ Compiler for Python 2.7

如果您使用的是 3.3 或更高版本,则需要安装 Visual Studio 2010 express,可在此处免费获得:https://www.visualstudio.com/downloads/download-visual-studio-vs#d-2010-express

如果您是 3.3 或更高版本并使用 64 位版本的 python,您需要安装附带 64 位编译器的 Microsoft SDK 7.1,并按照此处的说明进行操作 Python PIP has issues with path for MS Visual Studio 2010 Express for 64-bit install on Windows 7

【讨论】:

  • 我没有安装编译器,所以从这个链接下载和安装立即解决了我的 Python 2.7 问题。
【解决方案2】:

这里的问题是$python_install_prefix/Lib/distutils/msvc9compiler.py 中的第 292 行(此处使用 Python 3.4.3),它说:

VERSION = get_build_version()

这只会检查你的 python 所用的 MSVC 版本。只需将此行替换为您的实际 Visual Studio 版本,例如。 12.0MSVC2013

VERSION = 12.0

将解决问题。

更新:事实证明,这个版本被硬编码是有充分理由的。 MSVC C 运行时不需要在主要版本之间兼容。因此,当您使用不同的 VS 版本时,您可能会遇到运行时问题。所以我建议使用 VS 2008(Python 2.6 到 3.2)和 VS2010(Python 3.3 及更高版本),直到这个问题得到解决。

VS 2015 (see here) 和 Python 3.5 将提供二进制兼容性。

对于 Python 2.7 用户,微软发布了一个特殊的Microsoft Visual C++ Compiler for Python 2.7,无需安装整个 VS 2008 即可使用。

【讨论】:

  • 其他解决方案完全是错误的。你根本不需要 VS 在你的 PATH 中!这应该是公认的解决方案。 VS2013 为我工作了 100%。请点赞。
  • 这会因'"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\cl.exe"' failed with exit status 2的错误而中断
  • 是的,它没有完成 - 因为存在链接错误或其他问题
  • 我想知道在我的 PC 上,VS 12 的路径是 [code]"C:\Program Files (x86)\Microsoft Visual Studio 11.0"。所以我可以用 VERSION = 11.0 解决这个问题
  • @MeLight,ismail,我刚刚尝试了解决方案,但遇到了 MeLight 面临的错误。如何摆脱错误:“错误:命令'“C:\Program Files\Microsoft Visual Studio 12.0\VC\BIN\cl.exe”'失败,退出状态为 2”。因为它最终会带你回到广场
【解决方案3】:

您可以改用 ol' good easy_install zipline

easy_install 不是 pip,但它的一个优点是也可以下载和安装二进制包,这将使您无需准备好 VC++。这当然依赖于假设二进制文件是为您的 Python 版本准备的。

更新:

是的,Pip 现在可以安装二进制文件了!

有一种新的二进制 Python 存档格式 (wheel) 应该取代“eggs”。 pip 已经支持*。这意味着只要有人为您的平台构建*并将其上传到 PyPI,您就可以安装 ziplinepip 而无需编译它。

【讨论】:

  • 为什么投反对票? pip 现在还安装二进制文件吗?
  • 这是一种解决方法。虽然有用,但它并没有回答问题——即如何解决错误。
  • 嗯,这是真的,如果接受的答案是非解决方法,我不介意。我仍然会一直强调这一点,因为不需要安装整个 Microsoft Visual Studio 就可以在 Windows 上安装 Python 包。
  • 如果不存在二进制包,即使使用easy_install,你也会得到error: Setup script exited with error: Unable to find vcvarsall.bat
【解决方案4】:

首先,您应该在系统中查找文件 vcvarsall.bat。

如果不存在,建议安装Microsoft Visual C++ Compiler for Python 2.7。如果您为所有用户安装,这将在“C:\Program Files (x86)\Common Files\Microsoft\Visual C++ for Python\9.0”中创建 vcvarsall.bat。

现在问题出在 C:/Python27/Lib/distutils/msvc9compiler.py 模块中的函数 find_vcvarsall(version) 中,该函数正在寻找 vcvarsall .bat 文件。

在函数调用之后,您会看到它正在注册表中查找包含 vcvarsall.bat 文件路径的条目。它永远不会找到它,因为此函数正在查找与上述安装位置不同的其他目录,而在我的情况下,注册表不存在。

解决此问题最简单的方法是手动返回 vcvarsall.bat 文件的路径。为此,请将 msvc9compiler.py 文件中的函数 find_vcvarsall(version) 修改为 vcvarsall.bat 文件的绝对路径,如下所示:

def find_vcvarsall(version):
    return r"C:\Program Files (x86)\Common Files\Microsoft\Visual C++ for Python\9.0\vcvarsall.bat"

这个解决方案对我有用。

如果您已经拥有 vcvarsall.bat 文件,则应检查注册表中是否有密钥 productdir

(HKEY_USERS、HKEY_CURRENT_USERS、HKEY_LOCAL_MACHINE 或 HKEY_CLASSES_ROOT)\Software\Wow6432Node\Microsoft\VisualStudio\version\Setup\VC

其中 version = msvc9compiler.get_build_version()

如果您没有钥匙,请执行以下操作:

def find_vcvarsall(version):
        return <path>\vcvarsall.bat

要了解从 find_vcvarsall(version) 函数开始的确切行为检查 msvc9compiler.py 模块。

【讨论】:

    【解决方案5】:

    仅仅因为你的机器上没有安装 c++ 编译器,请检查以下内容

    • 从此page 下载 Microsoft Visual C++ 2008。无论如何,这通常是一个有用的页面,因此您可能应该将其添加为书签。对于 Python 3.3+,请使用 MS Visual C++ 2010。 安装它。

    • 打开 Windows 资源管理器(文件浏览器)并搜索“vcvarsall.bat”的位置并将其剪切到剪贴板。

    • 从 Windows 开始键运行 regedit。您将需要管理员权限。

    • 将注册表项添加到 HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\VisualStudio\9.0\Setup\VC\ProductDir(64 位 Windows)或 HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\9.0\Setup\VC\ProductDir(32 位) 如here所述。

    提示:registery目录下的0.9是你Visual Studio当前安装的版本,如果你运行VS 2013,你必须找到路径HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\VisualStudio\12.0 ....

    • 在 Windows 开始键处,键入 cmd 以获取命令 shell。如果需要,请转到您的虚拟环境并运行 activate.bat。

    • pip install 或任何你用来安装它的东西。

    【讨论】:

    • 当我安装 MVC2008 时,任何地方都没有文件 vcvarsall,注册表中也没有 VisualStudio\9.0
    • @StéphaneLaurent 可再发行组件将不起作用。您需要带有 C++ 编译器的 VS 2008 Express - 请参阅 this answer 以获得更好的说明。
    • 谢谢@Pakman。但是我花了一天时间尝试安装这个库,最后我强烈决定不再继续这些令人沮丧的不成功尝试。这真是一场噩梦。
    • @Stéphane 好吧,我们在 2 年后,问题实际上更糟。 SO 上的大多数“修复”不再适用,最好的方法(将 pip 更新到 6.x)会破坏您的环境变量。
    • 详细来说,我下载了 VC 2008(因为我使用的是 Python 2.7),添加了注册表项 HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\VisualStudio\9.0\Setup\VC\ProductDir 和一个值C:\Users\\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0,并运行“c:\python27\python setup.py build --build-base=./build install " 来自 Visual C++ 2008 64 位命令提示符。这行得通。非常感谢!
    【解决方案6】:

    您的路径中需要有 Visual Studio 的 bin 目录。 Pip install 正在尝试编译一些 C 代码。

    【讨论】:

    【解决方案7】:

    我也花了几个小时研究这个 vcvarsall.bat。大多数关于 SO 的答案都集中在 Python 2.7 和/或通过修改系统路径来创建解决方法。没有一个对我有用。该解决方案适用于 Python 3.5,并且(我认为)是“正确”的做法。

    1. 查看此链接——它描述了用于不同版本 Python 的 Windows 编译器:https://wiki.python.org/moin/WindowsCompilers#Microsoft_Visual_C.2B-.2B-_14.0_standalone:_Visual_C.2B-.2B-_Build_Tools_2015_.28x86.2C_x64.2C_ARM.29

    2. 对于 Python 3.5,请下载:https://www.microsoft.com/en-us/download/details.aspx?id=49983

    3. 对我来说,我必须运行 C:\Program Files (x86)\Microsoft Visual C++ Build Tools\Visual C++ x64 Native Build Tools Command Prompt 才能工作。在该命令提示符下,我运行了“pip install django_compressor”,这是导致我出现问题的特定软件包,它运行良好。

    希望这可以节省一些时间!

    【讨论】:

    【解决方案8】:

    感谢“msoliman”的提示,但他的回答并没有为那些没有 VS2010 的人提供明确的解决方案
    例如,我有 VS2012 和 VS2013,系统注册表中没有这样的 KEY。

    解决方案:
    编辑文件:“[Python_install_loc]/Lib/distutils/msvc9compiler.py”
    第 224 行更改:

    productdir = Reg.get_value(r"%s\Setup\VC" % vsbase,
                                   "productdir")
    

    到:

    productdir = "C:\Program Files (x86)\Microsoft Visual Studio [your_vs_version(11/12...)]\VC"
    

    应该可以的

    【讨论】:

    • 您需要使用与安装 python 本身相同版本的编译器和工具。否则你会遇到奇怪的问题。
    【解决方案9】:

    如果您尝试安装 matplotlib 以便在 python 上使用图形。试试这个链接。 https://github.com/jbmohler/matplotlib-winbuild。 这是一组在 MS Windows 平台上从源代码构建 matplotlib 的脚本。

    要在 Python 中构建和安装 matplotlib,请执行以下操作:

    git clone https://github.com/matplotlib/matplotlib
    git clone https://github.com/jbmohler/matplotlib-winbuild
    $ python matplotlib-winbuild\buildall.py
    

    构建脚本会自动检测 Python 版本和 32/64 位。

    【讨论】:

    • 为什么我不能运行 lst 命令 python matplotlib-winbuild\buildall.py 。我收到此错误 python: can't open file 'buildall.py': [Errno 2] No such file or directory 即使此文件存在于此
    【解决方案10】:

    我很欣赏这可能不是解决 3.4 问题的答案,但我尝试了很多方法来解决 3.4 问题,并认为如果有人时间紧迫或不知道如何纠正,这可能会很有用它(在我的情况下,工作需要)。

    使用完全相同的设置,我发现我的安装问题只发生在 Python 3.4 上。当我更改为 2.7 时,我的所有问题似乎都已解决。

    虽然我们有一个相当过分热心的安全设置,所以我将在我的家庭版本(仍然是 3.4)上尝试相同的设置,看看我是否有更多的乐趣。我的倾向是我的 VS 版本在某种程度上受到了限制,上面的答案应该会有所帮助。如果我今晚发现更多内容,我会添加更多细节。

    这是我的第一个回复,恐怕不是最技术性的!

    【讨论】: