I have a Python program that I would like to call from a C program. I have been told there is a way to create a C library from my Python Code using Cython.
I am new to Cython, and I don't really understand how it works. So far, I have Cython installed on my Linux machine and I have placed my Python program in the Cython-0.22.1 folder.
Here is what I have tried so far.
- I renamed my
module.py
file to amodule.pyx
file. I modified my
setup.py
file in the Cython folder so that it looks like this:from distutils.core import setup from Cython.Build import cythonize setup(name = 'First try', ext_modules = cythonize("module.pyx"),)
I ran this command in the shell:
cython module.pyx
. This created amodule.c
file in the same folder.- I tried to run
gcc module.c
, however, I goterror: Python.h no such file or directory.
So I performed alocate Python.h
and chose a file location, so I ran this instead:gcc -I /root/Asta/nastassiasaidakcython/Cython-0.22.1/Python27/include/ module.c
- However, this only showed me a bunch of unresolved parameter errors.
- I also followed this advice and tried additional flags:
gcc -fPIC -c -I /root/Asta/nastassiasaidakcython/Cython-0.22.1/Python27/include module.c
, but that did not solve my parameter issue either.
So I have been stuck here with a bunch of unresolved parameters. Here is a snippet of what these errors look like:
/root/Asta/nastassiasaidakcython/Cython-0.22.1/Python27/include/memoryobject.h:6
8: error: declaration for parameter ‘PyMemoryViewObject’ but no such parameter
/root/Asta/nastassiasaidakcython/Cython-0.22.1/Python27/include/stringobject.h:4
9: error: declaration for parameter ‘PyStringObject’ but no such parameter
/root/Asta/nastassiasaidakcython/Cython-0.22.1/Python27/include/complexobject.h:
43: error: declaration for parameter ‘PyComplexObject’ but no such parameter
/root/Asta/nastassiasaidakcython/Cython-0.22.1/Python27/include/complexobject.h:
12: error: declaration for parameter ‘Py_complex’ but no such parameter
/root/Asta/nastassiasaidakcython/Cython-0.22.1/Python27/include/floatobject.h:17
: error: declaration for parameter ‘PyFloatObject’ but no such parameter
/root/Asta/nastassiasaidakcython/Cython-0.22.1/Python27/include/longobject.h:10:
error: parameter ‘PyLongObject’ has incomplete type
/root/Asta/nastassiasaidakcython/Cython-0.22.1/Python27/include/longobject.h:10:
error: declaration for parameter ‘PyLongObject’ but no such parameter
/root/Asta/nastassiasaidakcython/Cython-0.22.1/Python27/include/intobject.h:26:
error: declaration for parameter ‘PyIntObject’ but no such parameter
/root/Asta/nastassiasaidakcython/Cython-0.22.1/Python27/include/unicodeobject.h:
423: error: declaration for parameter ‘PyUnicodeObject’ but no such parameter
/root/Asta/nastassiasaidakcython/Cython-0.22.1/Python27/include/unicodeobject.h:
137: error: declaration for parameter ‘Py_UNICODE’ but no such parameter
/root/Asta/nastassiasaidakcython/Cython-0.22.1/Python27/include/unicodeobject.h:
128: error: declaration for parameter ‘Py_UCS4’ but no such parameter
/usr/include/wchar.h:824: error: declaration for parameter ‘wcsftime’ but no suc
h parameter
/usr/include/wchar.h:756: error: declaration for parameter ‘ungetwc’ but no such
parameter
/usr/include/wchar.h:749: error: declaration for parameter ‘fputws’ but no such
parameter
/usr/include/wchar.h:742: error: declaration for parameter ‘fgetws’ but no such
parameter
/usr/include/wchar.h:733: error: declaration for parameter ‘putwchar’ but no suc
h parameter
/usr/include/wchar.h:727: error: declaration for parameter ‘putwc’ but no such p
arameter
/usr/include/wchar.h:726: error: declaration for parameter ‘fputwc’ but no such
parameter
/usr/include/wchar.h:719: error: declaration for parameter ‘getwchar’ but no suc
h parameter
/usr/include/wchar.h:713: error: declaration for parameter ‘getwc’ but no such p
arameter
/usr/include/wchar.h:712: error: declaration for parameter ‘fgetwc’ but no such
parameter
/usr/include/wchar.h:510: error: declaration for parameter ‘__wcstold_internal’
but no such parameter
/usr/include/wchar.h:507: error: declaration for parameter ‘__wcstof_internal’ b
ut no such parameter
/usr/include/wchar.h:504: error: declaration for parameter ‘__wcstod_internal’ b
ut no such parameter
/usr/include/wchar.h:414: error: declaration for parameter ‘wcstoul’ but no such
parameter
/usr/include/wchar.h:408: error: declaration for parameter ‘wcstol’ but no such
parameter
/usr/include/wchar.h:394: error: declaration for parameter ‘wcstod’ but no such
parameter
/usr/include/wchar.h:359: error: declaration for parameter ‘wcsrtombs’ but no su
ch parameter
/usr/include/wchar.h:353: error: declaration for parameter ‘mbsrtowcs’ but no su
ch parameter
/usr/include/wchar.h:318: error: declaration for parameter ‘mbrlen’ but no such
parameter
/usr/include/wchar.h:316: error: declaration for parameter ‘__mbrlen’ but no suc
h parameter
/usr/include/wchar.h:312: error: declaration for parameter ‘wcrtomb’ but no such
parameter
/usr/include/wchar.h:308: error: declaration for parameter ‘mbrtowc’ but no such
parameter
/usr/include/wchar.h:298: error: declaration for parameter ‘wctob’ but no such p
arameter
/usr/include/wchar.h:294: error: declaration for parameter ‘btowc’ but no such p
arameter
/usr/include/wchar.h:279: error: declaration for parameter ‘wmemset’ but no such
parameter
/usr/include/wchar.h:276: error: declaration for parameter ‘wmemmove’ but no suc
h parameter
/usr/include/wchar.h:271: error: declaration for parameter ‘wmemcpy’ but no such
parameter
/usr/include/wchar.h:267: error: declaration for parameter ‘wmemcmp’ but no such
parameter
/usr/include/wchar.h:262: error: declaration for parameter ‘wmemchr’ but no such
parameter
/usr/include/wchar.h:243: error: declaration for parameter ‘wcslen’ but no such
parameter
/usr/include/wchar.h:240: error: declaration for parameter ‘wcstok’ but no such
parameter
/usr/include/wchar.h:235: error: declaration for parameter ‘wcsstr’ but no such
parameter
/usr/include/wchar.h:232: error: declaration for parameter ‘wcspbrk’ but no such
parameter
/usr/include/wchar.h:229: error: declaration for parameter ‘wcsspn’ but no such
parameter
/usr/include/wchar.h:225: error: declaration for parameter ‘wcscspn’ but no such
parameter
/usr/include/wchar.h:211: error: declaration for parameter ‘wcsrchr’ but no such
parameter
/usr/include/wchar.h:208: error: declaration for parameter ‘wcschr’ but no such
parameter
/usr/include/wchar.h:183: error: declaration for parameter ‘wcsxfrm’ but no such
parameter
/usr/include/wchar.h:178: error: declaration for parameter ‘wcscoll’ but no such
parameter
/usr/include/wchar.h:153: error: declaration for parameter ‘wcsncmp’ but no such
parameter
/usr/include/wchar.h:150: error: declaration for parameter ‘wcscmp’ but no such
parameter
/usr/include/wchar.h:146: error: declaration for parameter ‘wcsncat’ but no such
parameter
/usr/include/wchar.h:142: error: declaration for parameter ‘wcscat’ but no such
parameter
/usr/include/wchar.h:138: error: declaration for parameter ‘wcsncpy’ but no such
parameter
/usr/include/wchar.h:134: error: declaration for parameter ‘wcscpy’ but no such
parameter
/usr/include/wchar.h:95: error: declaration for parameter ‘mbstate_t’ but no suc
h parameter
/usr/include/ctype.h:151: error: declaration for parameter ‘_tolower’ but no suc
h parameter
/usr/include/ctype.h:150: error: declaration for parameter ‘_toupper’ but no suc
h parameter
/usr/include/ctype.h:146: error: declaration for parameter ‘toascii’ but no such
parameter
/usr/include/ctype.h:142: error: declaration for parameter ‘isascii’ but no such
parameter
/usr/include/ctype.h:119: error: declaration for parameter ‘toupper’ but no such
parameter
/usr/include/ctype.h:116: error: declaration for parameter ‘tolower’ but no such
parameter
/usr/include/ctype.h:112: error: declaration for parameter ‘isxdigit’ but no suc
h parameter
/usr/include/ctype.h:111: error: declaration for parameter ‘isupper’ but no such
parameter
/usr/include/ctype.h:110: error: declaration for parameter ‘isspace’ but no such
parameter
/usr/include/ctype.h:109: error: declaration for parameter ‘ispunct’ but no such
parameter
/usr/include/ctype.h:108: error: declaration for parameter ‘isprint’ but no such
parameter
/usr/include/ctype.h:107: error: declaration for parameter ‘isgraph’ but no such
parameter
/usr/include/ctype.h:106: error: declaration for parameter ‘islower’ but no such
parameter
/usr/include/ctype.h:105: error: declaration for parameter ‘isdigit’ but no such
parameter
/usr/include/ctype.h:104: error: declaration for parameter ‘iscntrl’ but no such
parameter
/usr/include/ctype.h:103: error: declaration for parameter ‘isalpha’ but no such
parameter
/usr/include/ctype.h:102: error: declaration for parameter ‘isalnum’ but no such
parameter
/usr/include/ctype.h:86: error: declaration for parameter ‘__ctype_toupper_loc’
but no such parameter
/usr/include/ctype.h:84: error: declaration for parameter ‘__ctype_tolower_loc’
but no such parameter
/usr/include/ctype.h:82: error: declaration for parameter ‘__ctype_b_loc’ but no
such parameter
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/include/stdarg.h:105: error: declaration
for parameter ‘va_list’ but no such parameter
/root/Asta/nastassiasaidakcython/Cython-0.22.1/Python27/include/objimpl.h:259: e
rror: declaration for parameter ‘PyGC_Head’ but no such parameter
/root/Asta/nastassiasaidakcython/Cython-0.22.1/Python27/include/object.h:523: er
ror: declaration for parameter ‘_Py_HashSecret_t’ but no such parameter
/root/Asta/nastassiasaidakcython/Cython-0.22.1/Python27/include/object.h:429: er
ror: declaration for parameter ‘PyHeapTypeObject’ but no such parameter
/root/Asta/nastassiasaidakcython/Cython-0.22.1/Python27/include/object.h:411: er
ror: declaration for parameter ‘PyTypeObject’ but no such parameter
/root/Asta/nastassiasaidakcython/Cython-0.22.1/Python27/include/object.h:305: er
ror: declaration for parameter ‘freefunc’ but no such parameter
/root/Asta/nastassiasaidakcython/Cython-0.22.1/Python27/include/object.h:302: er
ror: declaration for parameter ‘PyBufferProcs’ but no such parameter
/root/Asta/nastassiasaidakcython/Cython-0.22.1/Python27/include/object.h:293: er
ror: declaration for parameter ‘PyMappingMethods’ but no such parameter
/root/Asta/nastassiasaidakcython/Cython-0.22.1/Python27/include/object.h:287: er
ror: declaration for parameter ‘PySequenceMethods’ but no such parameter
/root/Asta/nastassiasaidakcython/Cython-0.22.1/Python27/include/object.h:273: er
ror: declaration for parameter ‘PyNumberMethods’ but no such parameter
/root/Asta/nastassiasaidakcython/Cython-0.22.1/Python27/include/object.h:179: er
ror: declaration for parameter ‘Py_buffer’ but no such parameter
/root/Asta/nastassiasaidakcython/Cython-0.22.1/Python27/include/object.h:112: er
ror: declaration for parameter ‘PyVarObject’ but no such parameter
/root/Asta/nastassiasaidakcython/Cython-0.22.1/Python27/include/object.h:108: er
ror: declaration for parameter ‘PyObject’ but no such parameter
/root/Asta/nastassiasaidakcython/Cython-0.22.1/Python27/include/pymem.h:52: erro
r: declaration for parameter ‘PyMem_Malloc’ but no such parameter
module.c:10286: error: expected ‘{’ at end of input
Am I on the right track, or are these errors an indication of a more serious problem which tells me that I need to find a different approach?