cython
1PYTHON setup.py build_ext --inplace
2PYTHON -c "import foo"
3PYTHON -c "import a"
4PYTHON -c "import b"
5
6######## setup.py ########
7
8from Cython.Build import cythonize
9from distutils.core import setup
10
11setup(
12ext_modules = cythonize("*.pyx"),
13)
14
15######## foo.pxd ########
16
17cdef int bar() except *
18
19cdef extern from "bar_impl.c":
20struct mystruct:
21int (*func_ptr)(int param) nogil
22
23######## foo.pyx ########
24
25cdef extern from "bar_impl.c":
26int bar() except *
27
28######## bar_impl.c ########
29
30static int bar() { return -1; }
31
32typedef struct mystruct {
33int (*func_ptr)(int param);
34} mystruct_t;
35
36######## a.pyx ########
37
38cimport cython
39from foo cimport bar
40
41assert bar() == -1
42
43
44######## b.pyx ########
45
46from foo cimport mystruct
47
48cdef int cb(int param) noexcept nogil:
49return param
50
51cdef mystruct ms = mystruct(&cb)
52assert ms.func_ptr(5) == 5
53