用Maven来Build python 项目的RPM

整整花了两天来配置,期间踩了无数坑,记录一下。 那个python项目用的python版本是2.6,这不是坑,坑的是它还用了Pylint这个垃圾玩意来做代码审查,Pylint又依赖了一大堆类似astroid的包,更坑的是Pylint这个破玩意又不是backward compatible的。

我系统是CentOS-6.8-x86_64-minimal.iso, 一开始我尝试用yum install python-pip 来安装pip,没装上,我又yum -y update了一下在,还是没有装上,没办法,我就直接用以下命令去把get-pip.py下载下来: curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"

然后用python来安装pip: python get-pip.py

接着我用pip install pylint来安装pylint,装的时候很顺利,也连带把它的那堆依赖包一起装了起来。本来以为终于大功告成了,结果发现pip install pylint默认安装最新版的Pylint的,它跟我的项目不兼容,我的项目用的pylint是1.0.0,编译失败。没办法,我只能先卸载已经安装的Pylint: pip uninstall pylint, 然后再用pip加上指定版本来安装pylint: pip install pylint -v=1.0.0, 结果,pip又找不到1.0.0这个版本!

好吧,我只能再自己手动去下载这个版本: wget https://pypi.python.org/packages/ba/50/ba8f4cfeaf66cba0e0d8fd63efb930593fe2d73b28d104b2530dc669f83d/pylint-1.0.0.tar.gz

然后解压:tar xvf pylint-1.0.0.tar.gz 然后cd pylint-1.0.0, 接着用python安装pylint:python setup.py install 终于成功安装上我需要的版本的pylint, 期间也是用同样的方法把它的那堆狗屁依赖包一起装上!

最后以为大功告成了,用mvn clean package来build rpm包,结果发现rpm-build没有安装,于是又得用yum把rpm-build安装上去:yum install rpm-build

期间还发现setuptools的版本不对,导致build 出来的zip包名不合规范。我就用pip uninstall setuptools卸载了它,然后yum install -y python-setuptools.noarch重新安装了它。

最后再遇上的问题是build rpm的时候报了一下错误: [INFO] Checking for unpackaged file(s): /usr/lib/rpm/check-files /root/ECE-CODE-BASE/ece-rda-base/rda-base/target/rpm/rda-base/buildroot [WARNING] error: Installed (but unpackaged) file(s) found: 我google了一番,很多网上的文章说了很多把check-files disable掉的解决方法都不凑效。这个check-files是新版本的rpm加上的,而我这里不需要,所以我直接把/usr/lib/rpm/check-files这个执行文件直接删掉。终于build成功!

最后说一句,我没有见过比Pylint更烂的代码工具了。

Written on 18 November 2016