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

当前回答

我遵守了指示http://springflex.blogspot.ru/2014/02/how-to-fix-valueerror-when-trying-to.html.但什么都没发生。然后我安装了2010 Visual Studio Express(http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express)遵循建议http://blog.python.org/2012/05/recent-windows-changes-in-python-33.html它帮助了我

其他回答

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

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

Microsoft Visual C++编译器Python 2.7版http://aka.ms/vcpython27

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

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

从最初的公告到distutils列表:

微软发布了Python 2.7的编译器包,使人们更容易在Windows上构建和分发C扩展模块。Microsoft Visual C++编译器Python 2.7版(又名VC9)可从以下网站获得: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稳定,以便自动化脚本可以轻松引用它。

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

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

提及:Jason Erickson[jerickso@stickpeople.com]. 他为Windows用户管理这个页面相当好。

我尝试了以上所有的答案,但没有为我工作。我使用的是Windows 10,并安装了Visual Studio 2010在我的情况下,需要将vcvars64.bat添加到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

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

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

我(在2015年)结合了这些因素:

来自的Microsoft Visual C++编译器Python 2.7http://aka.ms/vcpython27使用distutils.core.setup()的旧包尝试使用python setup.py构建,而不是使用pip。

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


解决方案

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

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

步骤2:设置环境变量

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

SET DISTUTILS_USE_SDK=1
SET MSSdk=1

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

步骤3:构建和安装

cd到要构建的包,然后运行pythonsesetup.pybuild,然后运行python setup.pyinstall。如果要安装到virtualenv,请在构建之前激活它。

关于这个问题的最佳和详尽的答案如下:https://blogs.msdn.microsoft.com/pythonengineering/2016/04/11/unable-to-find-vcvarsall-bat/

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

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