[英]How to install Vowpal Wabbit Python bindings under Travis CI?
我正在尝试从我的Python项目中使用Vowpal Wabbit。 我可以使用pip install vowpalwabbit
在本地(在Ubuntu 18.04中)安装Python VW绑定,只要我首先安装了构建依赖项( apt install libboost-program-options-dev libboost-python-dev zlib1g-dev
)。
我想在Travis CI下为Python程序运行单元测试,因此我还需要能够在Travis环境中安装依赖项。 但是,我无法安装Python VW绑定。 我创建了一个最小的项目来演示该问题。 我正在使用Travis和Python版本xenial
和3.7的最新xenial
(即基于Ubuntu 16.04的)映像。 这是Travis CI输出 。
构建Python扩展时,Python 3.5问题似乎是由链接到错误的(Python 2.7)版本的libboost_python.so引起的(请参见此问题 )。 该问题有一个解决方法,其中涉及更改符号链接libboost_python.so以指向Python 3.5版本(而不是2.7版本)。 我在boost-py2-py3-workaround
分支上尝试过,但是似乎没有帮助 。
这是.travis.yml
配置:
dist: xenial
language: python
python:
- '3.5'
- '3.6'
- '3.7'
cache: pip
install:
- sudo apt-get install libboost-program-options-dev libboost-python-dev zlib1g-dev
- pip install vowpalwabbit
script:
- python test-vw.py
test-vw.py
脚本仅导入pyvw
模块并运行一些基本命令(取自Python VW文档):
from vowpalwabbit import pyvw
vw = pyvw.vw(quiet=True)
ex = vw.example('1 | a b c')
vw.learn(ex)
print(vw.predict(ex))
我希望pip install
成功,然后test-vw.py
应该运行并在创建模型和打印其预测时产生一点输出。
实际结果取决于Python版本。 对于Python 3.5, vowpalwabbit
库似乎已成功安装,但运行Python脚本失败并显示此错误( 完整构建日志 ):
$ python test-vw.py Traceback (most recent call last): File "test-vw.py", line 6, in <module> from vowpalwabbit import pyvw File "/home/travis/virtualenv/python3.5.6/lib/python3.5/site-packages/vowpalwabbit/pyvw.py", line 2, in <module> import pylibvw ImportError: /usr/lib/x86_64-linux-gnu/libboost_python-py27.so.1.58.0: undefined symbol: PyClass_Type The command "python test-vw.py" exited with 1.
对于Python 3.6和3.7, pip install
失败( 完整的构建日志 ):
Using Python 3.6
pyenv: python3.6-config: command not found
The `python3.6-config' command exists in these Python versions:
3.6
3.6.7
/usr/bin/g++ -std=c++0x -I /usr/local/include/boost -I /usr/include -I ../rapidjson/include -fPIC -c pylibvw.cc -o pylibvw.o
In file included from /usr/include/boost/python/detail/prefix.hpp:13:0,
from /usr/include/boost/python/args.hpp:8,
from /usr/include/boost/python.hpp:11,
from pylibvw.cc:14:
/usr/include/boost/python/detail/wrap_python.hpp:50:23: fatal error: pyconfig.h: No such file or directory
因此,似乎有两个独立的问题,具体取决于所尝试的Python版本。 我很高兴为任何一个问题提供帮助。
我让它适用于Python 3.5案例。 关键部分是更改符号链接以指向libboost_python.so的Python 3.5版本,例如.travis.yml中的代码:
install:
- sudo apt-get install libboost-program-options-dev libboost-python-dev zlib1g-dev
- sudo ln -sf /usr/lib/x86_64-linux-gnu/libboost_python-py35.a /usr/lib/x86_64-linux-gnu/libboost_python.a
- sudo ln -sf /usr/lib/x86_64-linux-gnu/libboost_python-py35.so /usr/lib/x86_64-linux-gnu/libboost_python.so
- pip install vowpalwabbit
这是boost-py2-py3-workaround
分支上的工作代码 ,Travis build输出 。
这足以使测试至少在一个Python版本上运行,目前还可以。 对于其他Python版本(3.6和3.7),问题在于没有容易获得的libboost-python预编译版本可以直接安装到Travis CI虚拟环境中。 通过apt-get提供的libboost-python库仅适用于Python 3.5,这是Ubuntu 16.04 Xenial中可用的默认Python 3版本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.