如何在Travis CI中使用python-openbabel?

5 投票
2 回答
906 浏览
提问于 2025-04-17 20:30

我在做一个毒理学映射项目时使用了Travis CI。在这个项目中,我需要用到python-openbabel这个库。因此,我在.travis.yml文件中添加了apt-get安装器,下面是相关内容(注释已去掉)。

language: python
python: 
  - "2.7"
before_install:
  - sudo apt-get update -qq
  - sudo apt-get install python-openbabel
install: "pip install -r requirements.txt"
script: nosetests tox.py

但是,所有的尝试都失败了,出现了错误信息Error: SWIG failed. Is Open Babel installed?。我尝试把SWIG也加到要安装的应用列表中,但还是没有成功。

此外,我还尝试按照Openbabel自己提供的整个构建过程来操作,得到了以下的travis.yml:

language: python
python: 
  - "2.7"
before_install:
  - sudo apt-get update -qq
  - sudo apt-get install python-openbabel
  - wget http://downloads.sourceforge.net/project/openbabel/openbabel/2.3.1/openbabel-2.3.1.tar.gz?r=http://%3A%2F%2Fsourceforge.net%2Fprojects%2Fopenbabel%2Fopenbabel%2F2.3.1%2Fts=1393727248&use_mirror=switch
  - tar zxf openbabel-2.3.1.tar.gz
  - mkdir build
  - cd build
  - cmake ../openbabel-2.3.1 -DPYTHON_BINDINGS=ON
  - make
  - make install
  - export PYTHONPATH=/usr/local/lib:$PYTHONPATH
install: "pip install -r requirements.txt"
script: nosetests tox.py

但是在尝试解压下载的文件时又失败了。

所有失败的构建记录可以在Travis-CI上查看:https://travis-ci.org/ToxProject/ToxProject
Github的代码库在这里:https://github.com/ToxProject/ToxProject

总之,我该如何让python-openbabel在Travis-CI上正常工作呢?

2 个回答

1

通过apt-get安装的openbabel版本是1.7,而在requirements.txt的setup.py中指定的版本是openbabel>=1.8。这就导致通过apt-get安装的包不符合requirements.txt的要求,pip在安装时不管已经安装的旧版本openbabel。

而且,virtualenv不会使用已经安装的系统包。

当通过pip安装openbabel时,它需要libopenbabel的头文件,但这些头文件并不包含在自动安装的libopenbabel4中,后者是通过python-openbabel安装的。ubuntu 12.04中travisCI使用的libopenbabel-dev版本也无法满足openbabel==1.8的需求。

解决方案:

手动安装更新版本的libopenbabel-devlibopenbabel4

before_install:
  - sudo apt-get install -qq -y swig python-dev
  - wget http://mirrors.kernel.org/ubuntu/pool/universe/o/openbabel/libopenbabel4_2.3.2+dfsg-1.1_amd64.deb
  - sudo dpkg -i libopenbabel4_2.3.2+dfsg-1.1_amd64.deb
  - wget http://mirrors.kernel.org/ubuntu/pool/universe/o/openbabel/libopenbabel-dev_2.3.2+dfsg-1.1_amd64.deb
  - sudo dpkg -i libopenbabel-dev_2.3.2+dfsg-1.1_amd64.deb
1

我发现现在在安装依赖包的阶段构建失败了。Travis会为运行Python创建一个虚拟环境。默认情况下,系统上安装的Python包(比如通过apt-get安装的)是无法使用的,除非你在你的travis.yml文件中添加以下内容:

virtualenv:
      system_site_packages: true

我之前也遇到过同样的问题,涉及到python-qt4和python-qgis。这里有一个我最近使用的travis.yml文件:https://github.com/anitagraser/TimeManager/blob/master/.travis.yml

撰写回答