pylibseq: Python bindings for libsequence
The bindings are implemented using pybind11.
This package serves two roles:
- It provides a means of using some of the more widely-used bits of libsequence within the Python language
- The unit tests of this package also serve as unit tests for libsequence.
What this package does not (currently) do:
- provide an interface for I/O operations. Python I/O and C++ I/O are fundamentally very different. Bridging the gap requires either adding features to pybind11 and/or adding modules to this package that depend on the boost Python interface, which would add an additional C++ dependency to this package.
- libsequence must be installed on your system. Currently, this package requires libsequence >= 1.9.6
- Python 3
- An up-to-date C++ compiler that is C++11 compatible via the flag -std=c++11. Roughly, this means GCC >= 4.8 and clang >= 3.5.
If you installing from GitHub, then pybind11 is a dependency.
If you want to modify the package, you will need pybind11 installed via your favorite Python package manager.
Currently, only Linux is supported. The reason is that OS X's case-insensitive file system is preventing current versions of libsequence from compiling. This situation will be resolved once all deprecated features are removed from libsequence
- 0.2.0: The package has been completely refactored. We now use pybind11 to integrate C++ and Python. Previous versions of this project used Cython. The API now corrresponds to libsequence 1.9.2. Python >= 3.4 is required.
- 0.1.9: Made memory management more robust: more unique_ptr instead of raw pointers. Cleanup __dealloc__ functions in extension types. Package now sets __version__. Class names are now "Pythonic" (and identical to the corresponding type names from libsequence) due to aliasing the C++ names from libsequence. Change from distutils to setuptools. Documentation fixes. Expose haplotype diversity and number of haplotype statistics. First (very alpha) release of pymsstats.
- 0.1.8: made sure C++ objects/fxns are declared "nogil". Raw pointers replaced with C++'s unique_ptr.
- 0.1.7: improvements to build system. Add option to build from GitHub.
- 0.1.6: update to libsequence 1.8.9. Add --use-cython option to setup.py
For many users, the best way to install the latest release will be via bioconda,
conda -c bioconda install pylibseq
The latest release of the package is available via PyPi, and can be installed with your favorite Python package manager:
$ pip install --upgrade pylibseq
Or, you may install from GitHub:
The GitHub version does not contain the .cpp files generated by pybind11. You need to generate those!
$ git clone http://github.com/molpopgen/pylibseq $ cd pylibseq
$ ./configure $ sudo pip install .
If you are using GCC on OS X (instead of clang), add --install-option=--gcc when installing.
You may also install from GitHub using pip:
$ pip install git+git://github.com/molpopgen/pylibseq
If you have libsequence in a "funny location" (e.g., something other that /usr/local):
$ CPPFLAGS=-I/path/to/libsequence/headers LDFLAGS=-L/path/to/libsequence/library sudo python setup.py install
For example, if libsequence is installed into /opt:
$ CPPFLAGS=-I/opt/include LDFLAGS=-L/opt/lib sudo python setup.py install
$ ./configure $ python setup.py build_ext -i $ python -m unittest discover tests
If using GCC on OS X (instead of clang), add --gcc to the setup.py command