当我们在一个全新的Python环境中构建一个AI/ML项目时,往往会在pip install -r requirements.txt
阶段遇到这样一个错误:
Building wheel for box2d-py (setup.py) ... error
....
swig.exe -python -c++ -IBox2D -small -O -includeall -ignoremissing -w201 -globals b2Globals -outdir library\Box2D -keyword -w511 -D_SWIG_KWARGS -o Box2D\Box2D_wrap.cpp Box2D\Box2D.i
error: command 'swig.exe' failed: None
....
ERROR: Failed building wheel for box2d-py
我们先介绍一下整体的依赖链路:这是一个AI/ML项目,requirements.txt中依赖到了gym,gym
是一个强化学习的Python库,它依赖box2d,box2d
是一个游戏领域的2D图形引擎,它在运行时又会依赖到swig,swig
是一个将c/c++代码封装为Python库的工具(是Python调用c/c++库的一种常见手段)。而swig并不是一个python库,应该说算是一个系统级别的库,在Linux,Windows和Mac上都有不同的发行包,无法通过pip自动安装。所以,在初次构建依赖到gym的Python项目时就会遇到“ERROR: Failed building wheel for box2d-py”错误,原因就是本地操作系统上没有安装swig。
Swig的官网是:https://www.swig.org/,Swig下载页面是:https://sourceforge.net/projects/swig/files/latest/download, 这里还有一篇介绍Swig的文章参考:初识代码封装工具SWIG
所以解决方非常明确:在本地系统(注:本文是在Windows环境下操作)上安装swig即可。首先从上面的下载页面中下载Windows版的swig安装包,它是一个zip包,解压之后即可使用,无需安装,但是需要配置一下PATH环境变量(如下图所示),以便命令行可以直接调用swig.exe, 就像上面日志信息中给出的调用方式一样:swig.exe -python -c++ -IBox2D ....-
。
此外:网上有文章提到的:手动安装box2d的做法并不适用本文所说的情况,经过测试,box2d-py作为一个Python库是可以被pip自动安装的,并不是需要手动安装。如果需要手动安装可以前往:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pybox2d,找到适合自己操作系统和Python版本的box2d安装包手动安装,以下是在我本地64位Windonws系统和Python 3.7环境下的安装命令,仅供参考:
pip install https://download.lfd.uci.edu/pythonlibs/archived/cp37/Box2D-2.3.2-cp37-cp37m-win_amd64.whl