I have written a small cython code that is
#t3.pyx
from libc.stdlib cimport atoi
cdef int fun(char *s):
return atoi(s)
the setup.py file is
from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules=cythonize("t3.pyx"))
I run setup.py using this command
python setup.py build_ext --inplace
This gives me
Compiling t3.pyx because it changed.
Cythonizing t3.pyx
running build_ext
building 't3' extension
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict- prototypes -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -g -fstack-protector- strong -Wformat -Werror=format-security -fPIC -I/usr/include/python2.7 -c t3.c -o build/temp.linux-x86_64-2.7/t3.o
t3.c:556:12: warning: ‘__pyx_f_2t3_fun’ defined but not used [-Wunused-function]
static int __pyx_f_2t3_fun(char *__pyx_v_s) {
^
x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wl,-Bsymbolic-functions -Wl,-z,relro -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security build/temp.linux-x86_64-2.7/t3.o -o /home/debesh/Documents/cython/t3/t3.so
When I run in the python interpreter it shows me
>>> import t3
>>> t3.fun('1234')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'fun'
>>>
cpdefnotcdefif you want to import the function in a regular Python script - Jondefrather thancpdef. Either way the code inside the function is compiled for both and runs at the same speed.cpdefis only useful in the small number of cases where you want to call a function in a performance critical loop in Cython and you want the same function available in Python. Otherwise it's restrictive. - DavidW