Windows下官方建议用与编译Python自身相同的Visual Studio版本来编译扩展模块,目前比较常用的Python版本对应的Visual Studio分别为:

Python 2.7 - Visual Studio 2008(9)

Python 3.3 & 3.4 - Visual Studio 2010(10)

Python 3.5 - Visual Studio 2015(14)

最近安装了一个Python 3.5,需要编译Fast R-CNN的Python扩展模块,电脑上安装的Visusal Studio版本只有2013,而且编译Fast R-CNN及其依赖项需要的CUDA Toolkit目前还不支持Visual Studio 2015。运行python setup.py build直接报错,显示错误为找不到vcvarsall.bat。

解决方法:

编辑Python安装目录/Lib/distutils/_msvccompiler.py,搜索这一行:

if version >= 14 and version > best_version:

这里14是distutils自动搜索系统中安装的Visual Studio最低版本(即2015),修改为12(即2013),保存,再次运行python setup.py build,成功启动编译,最后在链接阶段报错,提示找不到库文件ucrt.lib

这个ucrt.lib是Visual C++ 2015对C语言运行库进行重构后的产物,对应以前版本Visual C++中的msvcrt.lib,解决的办法也很简单,打开VC安装目录/lib,找到msvcrt.lib,复制一份并更名为ucrt.lib,再次运行python setup.py build,编译成功。