[英]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.