我尝试安装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
我尝试安装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://www.lfd.uci.edu/~gohlke/pythonlibs/
其他回答
对于Python 3.4,依赖于Visual Studio 2010。安装Visual C++2010 Express为我解决了这个问题。
欺骗它使用VS 2008或2013安装,而我碰巧没有使用。
我没有看到任何使用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
发生什么事?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++编译器)
最简单的解决方案是为流行的Python包使用Christoph Gohlke的Windows安装程序(.msi)。他为Python2.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以包含构建工具或从下载DevKithttp://rubyinstaller.org/downloads并遵循以下说明http://github.com/oneclick/rubyinstaller/wiki/Development-Kit
您可以在https://stackoverflow.com/a/13445719/284795
以下步骤为我解决了这个问题,我正尝试使用cython扩展创建设置。
安装Microsoft Visual C++编译器Python 2.7版默认安装位置为@C: \Users\PC user\AppData\Local\Programs\Common\Microsoft\Visual C++对于Python这实际上可能会解决问题,请在继续之前测试一次。如果失败,请检查VC中的位置++对于python,vcvarsall.bat文件位于打开msvc9compiler.py记事本中distutils包的文件。在我的箱子里@C: \Anaconda2\Lib\distutils\msvc9compiler.py find_vcvarsall函数在此文件中,通过打印版本来确定VC的版本论点对于Python 2.7,可能是9.0现在创建一个环境变量VS90COMNTOOLS,指向C: \Users\PC user\AppData\Local\Programs\Common\Microsoft\Visual C++用于Python\9.0\VC\bin出于某种原因,distutils期望vcvarsall.bat文件应位于VCdir中,但对于python工具则为VC++它位于9.0的根目录中。要解决此问题,请从path.join(大致围绕第247行)#productdir=os.path.join(toolsdir,os.pardir,os.pardir,“VC”)productdir=os.path.join(toolsdir,os.pardir,os.pardir)
以上步骤为我解决了问题。
关于这个问题的最佳和详尽的答案如下:https://blogs.msdn.microsoft.com/pythonengineering/2016/04/11/unable-to-find-vcvarsall-bat/
在大多数情况下,只要找到适合您所需的python依赖项的.whl包并使用pip安装它就足够了。
在最后一种情况下,您必须安装microsoft编译器并从源代码安装软件包。