在安装Python包的时候报错:error: Unable to find vcvarsall.bat的解决办法

在使用openpose这个人体姿态检测程序过程中,用到了一个C++包,但是在windows系统下需要利用swig组件编译一下才可以使用,但是windows下比较坑的一点就是编译工具不完善,在使用swig的过程中老是报错:error: Unable to find vcvarsall.bat,费了好大劲终于折腾好了,同时了解了一下Windows下的Python包编译原理,记录一下。

一、vcvarsall.bat是什么, 为什么需要这个组件?

Python最大的优点就是通过各种包扩展其本身的功能。有了这些功能强大包的加持,Python无往不利,能够编程一切,比如图像处理中的 Pillow包, 高性能机器学习包scikit-learn、或用于微线程处理的greenlet包。但是,这些包时怎么能做Python语言本身做不到的事情呢?

答案是它们调用了计算机底层内核,包括了一些非Python语言的扩展模块。与Python模块不同,它们不是.py文件,它们是.pyd文件。在这个文件中,函数的调用是用Python写的,但是涉及到计算机的底层实现以及需要实现高性能的部分通常用C语言编写

当我们安装Python包的时候出现找不到vcvarsall.bat时,这说明你正在安装一个包含扩展模块但只有源代码的包。“vcvarsall.bat”是Visual Studio编译器的一部分,这是编译C模块从而为Python所用的必要组件。

那么有读者可能会问:在安装之前编译好不就得了吗,非要用户自己现在编译器编译吗?

我们平常下载的Windows程序之所以不需要自己下载编译器编译,而是直接傻瓜式地点击下一步就能安装好,是因为操作系统提供了兼容性处理。但是,Python运行的环境非常复杂,有些时候并不是专门为Windows系统开大的,每台机器情况都不一样,导致编译的包完全不兼容。

所以开发者只能发布源代码,用户在自己的机器上用适合自己机器的编译器工具对源码进行编译,

但是对于windows系统来说,大多数人装系统的时候并没有装相应的编译环境,(比如说 Visual Studio),而且Windows环境下这些编译器还因为版本不匹配,使用盗版系统等原因很难装。

当然,对于Windows系统来说,这种情况也有聪明的程序员提出了相应的解决方案。对于视窗平台,软件包开发者可以上传.whl格式的安装包以及源代码。.whl文件本质上就是zip或者rar格式文件,只不过他更加方便python的安装以及使用。而且包含的扩展模块已经编译好了,所以只要下载对应系统和版本的```.whl``文件,无需编译器即可安装。

二、如果遇到没有.whl文件的包怎么办

在http://pythonwheels.com/这个网站里,对最受欢迎的360多个Python包,都提供了不同Windows版本下封装的.whl文件。但是,Python包实在是太多了,有时你会遇到一个封装的.whl文件。下边就是解决方案:

首先,如果不急的话就等等,一般这种情况是这个包刚被开发出来,只在Linux下发布,Windows下正在测试。

当然,如果这个包本来就没有打算发布Windows版本,那么你需要自己编译一下。

编译之前需要安装编译器工具包。按照对应的Python版本下载对应的工具包,下表列出了编译2.6版本之后的Python包所需的工具以及部分下载链接。其中可以下载对应的VS,也可以直接下载工具集,对于非C++开发者来说,第二种方式非常友好,免去了安装很多不要组件和C++编译环境的问题。

Python版本 对应的VS 对应的工具包
3.5及更高 Visual Studio 2017 Visual C++ Build Tools 2015
3.3 或 3.4 Visual Studio 2010 Windows SDK for Windows 7 and .NET 4.0
2.6 到 3.2 Microsoft Visual C++ Compiler for Python 2.7

下载好之后,进去安装页面,按照提示安装即可。最后,按照下边这个链接编译就好

参考链接:

  • error: Unable to find vcvarsall.bat解决办法

你可能感兴趣的:(python)