Skip to content
Snippets Groups Projects
Piotr Maślanka's avatar
Piotr Maślanka authored
6535dd3d

snakehouse

Build Status Code Climate Issue Count PyPI PyPI version PyPI PyPI license

snakehouse is a tool to pack mutiple .pyx files into a single extension.

There's a MANDATORY READING part at the end of this README. Read it or you will be sure to run into trouble.

Inspired by this StackOverflow discussion.

Tested and works on CPython 3.5-3.9, both Windows and Linux. It doesn't work on PyPy.

Contributions most welcome! If you contribute, feel free to attach a change to CONTRIBUTORS.md as a part of your pull request as well! Note what have you changed in CHANGELOG.md as well!

Usage notes - MANDATORY READING

Take a look at example on how to multi-build your Cython extensions.

Don't place modules compiled that way in root .py file's top level imports. Wrap them in a layer of indirection instead!

This applies to unit tests as well!

When something goes wrong (eg. the application throws an unhandled exception) the built module has a tendency to dump core. Try to debug it first by passing dont_snakehouse=True to your modules in the debug mode.

Also note that if you are compiling in dont_snakehouse mode then your modules should have at least one of the following:

  • a normal Python def
  • a normal Python class (not cdef class)
  • a line of Python initialization, eg.
a = None

or

import logging

logger = logging.getLogger(__name__)

Otherwise PyInit won't be generated by Cython and such module will be unimportable in Python. Normal import won't suffice.