pip install 给出错误:无法找到 vcvarsall.bat

Posted

技术标签:

【中文标题】pip install 给出错误:无法找到 vcvarsall.bat【英文标题】:pip install gives error: Unable to find vcvarsall.bat 【发布时间】:2013-11-18 19:16:52 【问题描述】:

在带有 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享受! 【参考方案1】:

首先,您应该在系统中查找文件 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 文件的路径。为此,请使用 vcvarsall.bat 文件的绝对路径修改 msvc9compiler.py 文件中的函数 find_vcvarsall(version),如下所示:

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 模块。

【讨论】:

【参考方案2】:

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

    查看此链接——它描述了用于不同版本 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

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

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

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

【讨论】:

Visual C++ 构建工具的直接链接:landinghub.visualstudio.com/visual-cpp-build-tools【参考方案3】:

这里的问题是$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 即可使用。

【讨论】:

其他解决方案完全是错误的。你的 PATH 中根本不需要 VS!这应该是公认的解决方案。使用 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”。因为它最终会带你回到广场【参考方案4】:

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

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

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

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

【讨论】:

【参考方案5】:

如果您在 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 问题。【参考方案6】:

如果您尝试安装 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 即使此文件存在于此【参考方案7】:

您可以改用 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【参考方案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】:

只是因为你的机器上没有安装 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 位命令提示符。这行得通。非常感谢!【参考方案10】:

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

【讨论】:

在您的驱动器中查找 vcvarsall.bat。将该位置添加到您的路径中。 在我的情况下,解决方案是通过包的 pip 手动安装,因为它支持***:trollius.readthedocs.org/#install-trollius-on-windows-using-pip

以上是关于pip install 给出错误:无法找到 vcvarsall.bat的主要内容,如果未能解决你的问题,请参考以下文章

Python pip install pyarrow 错误,无法执行'cmake'

pip install上的ModuleNotFoundError

无法找到包 python-pip Ubuntu 20.04

【已解决】python无法使用pip install【图文解释】

运行 `pip install` 的 Ubuntu 出现错误“无法构建以下必需的软件包:* freetype”

pip install mysqlclient 返回“致命错误 C1083:无法打开文件:'mysql.h':没有这样的文件或目录