Я пытаюсь использовать Vowpal Wabbit из моих проектов на Python. Я могу установить привязки Python VW локально (в Ubuntu 18.04), используя pip install vowpalwabbit
, пока я впервые установил зависимости сборки (apt install libboost-program-options-dev libboost-python-dev zlib1g-dev
).
Я хочу запускать модульные тесты для программ на Python под Travis CI, поэтому мне нужно иметь возможность устанавливать зависимости и в среде Travis. Однако я не могу установить привязки Python VW для установки. Я создал минимальный проект , демонстрирующий проблему. Я использую самый последний xenial
(т.е. на основе Ubuntu 16.04) Travis и Python версий 3.5, 3.6 и 3.7. Вот вывод Travis CI .
Проблема Python 3.5, по-видимому, вызвана ссылками на неправильную (Python 2.7) версию libboost_python.so (см., Например, эту проблему ) при сборке расширения Python. У этой проблемы был обходной путь, который включал изменение символической ссылки 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 пробуют. Я рад за помощь в любом вопросе.