Welcome to snakehouse’s documentation!¶
What is snakehouse?¶
How do I install it?¶
Do it via
pip install snakehouse
All dependencies will be installed automatically.
Mandatory reading and limitations¶
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!
So if your module is called
example, make a
the following code:
if __name__ == '__main__': from example import run run()
Or however you do start your application.
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
mode then your modules should have at least one of the following:
a normal Python
a normal Python class (not
a line of Python initialization, eg.
a = None
import logging logger = logging.getLogger(__name__)
PyInit won’t be generated by Cython
and such module will be unimportable in Python. Normal import won’t suffice.
Contributions are most welcome. Just add yourself to
at your pull request. At this moment most pressing issues are the segfaulting problem,
where snakehouse-built libraries segfault the Python interpreter when there’s an unhandled
exception (sometimes, I can’t really seem to pinpoint the problem source).
Try to unit test what you’re changing, but that is by no way a requirement.