Skip to content

MarkLodato/cython_freeze

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 

Repository files navigation

NAME

cython_freeze.py - create a C file for embedding Cython modules

SYNOPSIS

cython_freeze.py module [...]

DESCRIPTION

cython_freeze.py generates a C source file to embed a Python interpreter with one or more Cython modules built in. This allows one to create a single executable from Cython code, without having to have separate shared objects for each Cython module.

A major advantage of this approach is that it allows debuging with gprof(1), which does not work with shared objects.

Note that this method differs from cython --embed. The --embed options modifies the resulting C source file to include a main() function, so it can only be used on a single Cython module. The advantage --embed is simplicity. This module, on the other hand, can be used with multiple modules, but it requires another C source file to be created.

EXAMPLE

In the example directory, there exist two Cython modules:

cmath.pyx

A module that interfaces with the -lm library.

combinatorics.pyx

A module that implements n-choose-r using cmath.

Both modules have the Python idiom if __name__ == "__main__", which only execute if that module is the "main" module. If run as main, cmath prints the factorial of the argument, while combinatorics prints n-choose-r.

The provided Makefile creates an executable, nCr, using combinatorics as the "main" module. It basically performs the following (ignoring the compiler flags):

$ cython_freeze.py combintorics cmath > nCr.c
$ cython combinatorics.pyx
$ cython cmath.pyx
$ gcc nCr.c -o nCr.o
$ gcc combinatorics.c -o combinatorics.o
$ gcc cmath.c -o cmath.o
$ gcc nCr.o combinatorics.o cmath.o -o nCr

Because the combinatorics module was listed first, its __name__ is set to "__main__", while cmath's is set to "cmath". The executable now contains a Python interpreter and both Cython modules. :

$ ./nCr
USAGE: ./nCr n r
Prints n-choose-r.
$ ./nCr 15812351235 12
5.10028093999e+113

PREREQUISITES

Cython 0.11.2 (or newer, assuming the API does not change)

SEE ALSO

About

DEPRECATED: Equivalent of freeze.py for Cython

Resources

Stars

Watchers

Forks

Packages

No packages published