簡體   English   中英

如何在Travis CI下安裝Vowpal Wabbit Python綁定?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM