|Travis| |AppVeyor| |PyPI| |conda|
.. |Travis| image:: https://api.travis-ci.org/dougalsutherland/cyflann.svg?branch=master .. _Travis: https://travis-ci.org/dougalsutherland/cyflann
.. |AppVeyor| image:: https://ci.appveyor.com/api/projects/status/github/dougalsutherland/cyflann?branch=master&svg=true .. _AppVeyor: https://ci.appveyor.com/project/dougalsutherland/cyflann
.. |PyPI| image:: https://badge.fury.io/py/cyflann.svg .. _PyPI: https://badge.fury.io/py/cyflann/
.. |conda| image:: https://anaconda.org/conda-forge/cyflann/badges/version.svg .. _conda: https://anaconda.org/conda-forge/cyflann
cyflann
is a Cython-based interface to the
FLANN <http://people.cs.ubc.ca/~mariusm/index.php/FLANN/FLANN>
_ library.
It allows you to call FLANN from Cython without python overheads; in particular, you can make many calls in parallel threads without the GIL.
If you're just looking for any Python interface to FLANN, the ctypes interface
that it ships with may be better for you. I wrote this interface for
an application <https://github.com/dougalsutherland/py-sdm/>
_
that needs to run lots of independent searches without the GIL.
The interface is currently incomplete; right now only float32 is supported, it also has some known issues, and is probably less friendly in general than it could be. If you want to use it, bug reports and/or pull requests are welcome.
cyflann is only tested with FLANNs since 1.8.4. cyflann supports FLANN's OpenMP wrappers, but has not been tested with its MPI or CUDA interfaces.
If you use the Anaconda <https://store.continuum.io/cshop/anaconda/>
_ Python
distribution, the easiest way to get both cyflann and FLANN, including on Windows, is::
conda install -c conda-forge cyflann
Otherwise, you need to install FLANN yourself (see below), and can then run::
pip install cyflann
NOTE: If you're using FLANN 1.8.4 or earlier, a problem with its pkg-config files means that cyflann won't link properly. This has been fixed in the development branch since April 2013, but the 1.9.1 release isn't yet widely packaged.
To work around this problem, set the environment variable FLANN_DIR
to the
root of the installation before running pip
or setup.py
, e.g.
/usr/local
if the libraries are in /usr/local/lib/libflann.so
.
If you're using sudo
, remember that it doesn't necessarily propagate
environment variables by default;
sudo FLANN_DIR=/wherever pip install cyflann
will work.
Anaconda: conda install -c conda-forge flann
(included as a requirement by the cyflann package).
OSX: using Homebrew <http://brew.sh>
_, brew install flann
; this gives you 1.9.1, but if pkg-config
doesn't work for you for some reason, it's FLANN_DIR=$(brew --prefix)
.
Ubuntu: apt-get install libflann1 flann-dev
; set FLANN_DIR=/usr
.
Fedora: yum install flann flann-devel
; set FLANN_DIR=/usr
.
CentOS:
EPEL <https://fedoraproject.org/wiki/EPEL>
_ has flann packages,
but they're old and not tested with cyflann. Compile from source.
Arch:
Install the AUR flann package <https://aur.archlinux.org/packages/flann/>
_;
cyflann wants FLANN_DIR=/usr
.
From source:
Download the release source <https://github.com/mariusmuja/flann/releases>
_,
and follow the user manual <http://www.cs.ubc.ca/research/flann/uploads/FLANN/flann_manual-1.8.4.pdf>
_ to install.
If you're installing 1.9.1 and have pkg-config
available,
you shouldn't need to set FLANN_DIR
,
but if not set it to whatever you set CMAKE_INSTALL_PREFIX
to
(/usr/local
by default).