Skip to content

Optional features and dependencies

Osma Suominen edited this page Oct 25, 2019 · 25 revisions

The core of Annif can be installed from PyPI with a single command. It consists of pure Python code and the only requirement with native code dependencies is NumPy.

There are some optional features that depend on external native code libraries:

voikko analyzer

Assuming you are using Ubuntu, you fill first need to install the libvoikko1 and voikko-fi packages:

sudo apt install libvoikko1 voikko-fi

Then install the optional feature:

pip install annif[voikko]

If you have installed Annif from GitHub, use this instead:

pip install .[voikko]
pip install -e .  # make sure the Annif installation remains in editable mode

fastText backend

Using the fastText backend requires installing the fastText Python wrapper, which compiles into native code and is not included by default when installing Annif. We use the fasttextmirror package from PyPI. You can install the optional dependencies like this:

pip install annif[fasttext]

If you have installed Annif from GitHub, use this instead:

pip install .[fasttext]
pip install -e .  # make sure the Annif installation remains in editable mode

Vowpal Wabbit based backends

Using the vw_multi or vw_ensemble backends requires installing the Vowpal Wabbit bindings for Python, which is not included by default when installing Annif. The bindings require building VW from source, so you need to install some libraries first (see Dependencies in the VW wiki for more details if necessary). On a typical Ubuntu 16.04 or 18.04 system this should be enough:

sudo apt install libboost-program-options-dev libboost-python-dev zlib1g-dev cmake libboost-system-dev libboost-thread-dev libboost-test-dev

You can install the optional dependencies like this:

pip install annif[vw]

If you have installed Annif from GitHub, use this instead:

pip install .[vw]
pip install -e .  # make sure the Annif installation remains in editable mode

If the build still fails and you get an error like this:

ImportError: /usr/lib/x86_64-linux-gnu/libboost_python-py27.so.1.58.0: undefined symbol: PyClass_Type

the likely reason is that the VW bindings are being built with the wrong (Python 2) version of libboost-python. You can fix it by fiddling with symlinks like this:

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

If there are still import errors they could be resolved by using libboost_python3 instead of libboost_python in the above symlinks.

Clone this wiki locally