Ошибки компилятора Cython

У меня старый компьютер, и я пытаюсь использовать Cython для ускорения некоторого написанного мной кода Python, однако я не могу заставить Cython работать даже с самыми простыми сценариями.

Вот код Python, который я пытаюсь запустить через Cython, и, насколько мне известно, он должен работать:

def hw():
    print "Hello World"

if __name__ == "__main__":
    hw()

И вот вывод из моего терминала:

C:\PyProjects\_cython>python hw.py
Hello World

C:\PyProjects\_cython>cython hw.py

C:\PyProjects\_cython>gcc hw.c
In file included from hw.c:4:
Python.h:8:22: error: pyconfig.h: No such file or directory
hw.c:457: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__Pyx_
PyInt_AsUnsignedLongLong'
hw.c:461: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__Pyx_
PyInt_AsLongLong'
hw.c:465: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__Pyx_
PyInt_AsSignedLongLong'
hw.c: In function '__Pyx_PyUnicode_Equals':
hw.c:826: error: 'Py_UNICODE' undeclared (first use in this function)
hw.c:826: error: (Each undeclared identifier is reported only once
hw.c:826: error: for each function it appears in.)
hw.c:826: error: expected ';' before 'ch1'
hw.c:827: error: expected ';' before 'ch2'
hw.c:828: error: 'ch1' undeclared (first use in this function)
hw.c:828: error: 'ch2' undeclared (first use in this function)
hw.c: At top level:
hw.c:1204: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__Pyx
_PyInt_AsUnsignedLongLong'
hw.c:1274: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__Pyx
_PyInt_AsLongLong'
hw.c:1344: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__Pyx
_PyInt_AsSignedLongLong'
hw.c: In function '__Pyx_InitStrings':
hw.c:1564: warning: assignment makes pointer from integer without a cast
hw.c: In function '__Pyx_PyInt_AsSize_t':
hw.c:1669: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'val'
hw.c:1669: error: 'val' undeclared (first use in this function)
hw.c:1670: error: expected ')' before 'LONG_LONG'
hw.c:1672: error: expected ')' before 'LONG_LONG'

У меня 64-битная Windows 7 с использованием 32-битного Python 2.7.


person Matt Roelle    schedule 31.07.2012    source источник
comment
В вашей команде gcc отсутствуют каталоги включения и другие параметры.   -  person Basile Starynkevitch    schedule 31.07.2012
comment
Чтобы сделать комментарий Базиля более конкретным. Для начала убедитесь, что Python.h доступен как включение для gcc.   -  person Endophage    schedule 31.07.2012
comment
Хорошо, я использовал gcc hw.c -IC:\Python27\include и вот результат: codepad.org/7uqvY7ui Все равно не работает и выдает ошибку   -  person Matt Roelle    schedule 31.07.2012


Ответы (1)


Ознакомьтесь с документацией. По моему опыту, самый простой способ сделать это — использовать distutils, поскольку он знает всю информацию, необходимую для передачи компилятору (например, расположение заголовков, важные библиотеки, параметры компилятора для создания подходящего общего объекта и т. д.). И, в конце концов, , написать файл setup.py не так уж и сложно. Если вы не хотите устанавливать библиотеку, просто выполните python setup.py build и скопируйте общий объект в любой каталог, который вы хотите (хотя вам может понадобиться немного покопаться в каталоге build, чтобы найти его).

person mgilson    schedule 31.07.2012