2009-07-28 3 views
2

Ich versuche, dieses Tutorial von Cython folgen: http://docs.cython.org/docs/tutorial.html#the-basics-of-cython und ich habe ein Problem.Hallo Welt von Cython Wiki funktioniert nicht

Die Dateien sind sehr einfach. Ich habe einen helloworld.pyx:

print "Hello World" 

und eine setup.py:

from distutils.core import setup 
from distutils.extension import Extension 
from Cython.Distutils import build_ext 

setup(
    cmdclass = {'build_ext': build_ext}, 
    ext_modules = [Extension("helloworld", ["helloworld.pyx"])] 
) 

und ich kompilieren es mit dem Standardbefehl:

python setup.py build_ext --inplace 

ich folgende Fehlermeldung bekam:

running build 
running build_ext 
building 'helloworld' extension 
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.6 -c helloworld.c -o build/temp.linux-x86_64-2.6/helloworld.o 
helloworld.c:4:20: error: Python.h: No such file or directory 
helloworld.c:5:26: error: structmember.h: No such file or directory 
helloworld.c:34: error: expected specifier-qualifier-list before ‘PyObject’ 
helloworld.c:121: error: expected specifier-qualifier-list before ‘PyObject’ 
helloworld.c:139: error: expected ‘)’ before ‘*’ token 
helloworld.c:140: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘__pyx_PyInt_AsLongLong’ 
helloworld.c:141: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘__pyx_PyInt_AsUnsignedLongLong’ 
helloworld.c:142: error: expected ‘)’ before ‘*’ token 
helloworld.c:147: error: expected ‘)’ before ‘*’ token 
helloworld.c:148: error: expected ‘)’ before ‘*’ token 
helloworld.c:149: error: expected ‘)’ before ‘*’ token 
helloworld.c:150: error: expected ‘)’ before ‘*’ token 
helloworld.c:151: error: expected ‘)’ before ‘*’ token 
helloworld.c:152: error: expected ‘)’ before ‘*’ token 
helloworld.c:153: error: expected ‘)’ before ‘*’ token 
helloworld.c:154: error: expected ‘)’ before ‘*’ token 
helloworld.c:155: error: expected ‘)’ before ‘*’ token 
helloworld.c:156: error: expected ‘)’ before ‘*’ token 
helloworld.c:157: error: expected ‘)’ before ‘*’ token 
helloworld.c:172: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token 
helloworld.c:173: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token 
helloworld.c:174: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token 
helloworld.c:181: error: expected ‘)’ before ‘*’ token 
helloworld.c:198: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token 
helloworld.c:200: error: array type has incomplete element type 
helloworld.c:221: error: ‘__pyx_kp_1’ undeclared here (not in a function) 
helloworld.c:221: warning: excess elements in struct initializer 
helloworld.c:221: warning: (near initialization for ‘__pyx_string_tab[0]’) 
helloworld.c:221: warning: excess elements in struct initializer 
helloworld.c:221: warning: (near initialization for ‘__pyx_string_tab[0]’) 
helloworld.c:221: warning: excess elements in struct initializer 
helloworld.c:221: warning: (near initialization for ‘__pyx_string_tab[0]’) 
helloworld.c:221: warning: excess elements in struct initializer 
helloworld.c:221: warning: (near initialization for ‘__pyx_string_tab[0]’) 
helloworld.c:221: warning: excess elements in struct initializer 
helloworld.c:221: warning: (near initialization for ‘__pyx_string_tab[0]’) 
helloworld.c:221: warning: excess elements in struct initializer 
helloworld.c:221: warning: (near initialization for ‘__pyx_string_tab[0]’) 
helloworld.c:222: warning: excess elements in struct initializer 
helloworld.c:222: warning: (near initialization for ‘__pyx_string_tab[1]’) 
helloworld.c:222: warning: excess elements in struct initializer 
helloworld.c:222: warning: (near initialization for ‘__pyx_string_tab[1]’) 
helloworld.c:222: warning: excess elements in struct initializer 
helloworld.c:222: warning: (near initialization for ‘__pyx_string_tab[1]’) 
helloworld.c:222: warning: excess elements in struct initializer 
helloworld.c:222: warning: (near initialization for ‘__pyx_string_tab[1]’) 
helloworld.c:222: warning: excess elements in struct initializer 
helloworld.c:222: warning: (near initialization for ‘__pyx_string_tab[1]’) 
helloworld.c:222: warning: excess elements in struct initializer 
helloworld.c:222: warning: (near initialization for ‘__pyx_string_tab[1]’) 
helloworld.c:237: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘inithelloworld’ 
helloworld.c:238: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘inithelloworld’ 
helloworld.c:305: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token 
helloworld.c:313: error: expected ‘)’ before ‘*’ token 
helloworld.c:379:21: error: compile.h: No such file or directory 
helloworld.c:380:25: error: frameobject.h: No such file or directory 
helloworld.c:381:23: error: traceback.h: No such file or directory 
helloworld.c: In function ‘__Pyx_AddTraceback’: 
helloworld.c:384: error: ‘PyObject’ undeclared (first use in this function) 
helloworld.c:384: error: (Each undeclared identifier is reported only once 
helloworld.c:384: error: for each function it appears in.) 
helloworld.c:384: error: ‘py_srcfile’ undeclared (first use in this function) 
helloworld.c:385: error: ‘py_funcname’ undeclared (first use in this function) 
helloworld.c:386: error: ‘py_globals’ undeclared (first use in this function) 
helloworld.c:387: error: ‘empty_string’ undeclared (first use in this function) 
helloworld.c:388: error: ‘PyCodeObject’ undeclared (first use in this function) 
helloworld.c:388: error: ‘py_code’ undeclared (first use in this function) 
helloworld.c:389: error: ‘PyFrameObject’ undeclared (first use in this function) 
helloworld.c:389: error: ‘py_frame’ undeclared (first use in this function) 
helloworld.c:392: warning: implicit declaration of function ‘PyString_FromString’ 
helloworld.c:399: warning: implicit declaration of function ‘PyString_FromFormat’ 
helloworld.c:412: warning: implicit declaration of function ‘PyModule_GetDict’ 
helloworld.c:412: error: ‘__pyx_m’ undeclared (first use in this function) 
helloworld.c:415: warning: implicit declaration of function ‘PyString_FromStringAndSize’ 
helloworld.c:420: warning: implicit declaration of function ‘PyCode_New’ 
helloworld.c:429: error: ‘__pyx_empty_tuple’ undeclared (first use in this function) 
helloworld.c:440: warning: implicit declaration of function ‘PyFrame_New’ 
helloworld.c:441: warning: implicit declaration of function ‘PyThreadState_GET’ 
helloworld.c:448: warning: implicit declaration of function ‘PyTraceBack_Here’ 
helloworld.c:450: warning: implicit declaration of function ‘Py_XDECREF’ 
helloworld.c: In function ‘__Pyx_InitStrings’: 
helloworld.c:458: error: ‘__Pyx_StringTabEntry’ has no member named ‘p’ 
helloworld.c:460: error: ‘__Pyx_StringTabEntry’ has no member named ‘is_unicode’ 
helloworld.c:460: error: ‘__Pyx_StringTabEntry’ has no member named ‘is_identifier’ 
helloworld.c:461: error: ‘__Pyx_StringTabEntry’ has no member named ‘p’ 
helloworld.c:461: warning: implicit declaration of function ‘PyUnicode_DecodeUTF8’ 
helloworld.c:461: error: ‘__Pyx_StringTabEntry’ has no member named ‘s’ 
helloworld.c:461: error: ‘__Pyx_StringTabEntry’ has no member named ‘n’ 
helloworld.c:461: error: ‘NULL’ undeclared (first use in this function) 
helloworld.c:462: error: ‘__Pyx_StringTabEntry’ has no member named ‘intern’ 
helloworld.c:463: error: ‘__Pyx_StringTabEntry’ has no member named ‘p’ 
helloworld.c:463: warning: implicit declaration of function ‘PyString_InternFromString’ 
helloworld.c:463: error: ‘__Pyx_StringTabEntry’ has no member named ‘s’ 
helloworld.c:465: error: ‘__Pyx_StringTabEntry’ has no member named ‘p’ 
helloworld.c:465: error: ‘__Pyx_StringTabEntry’ has no member named ‘s’ 
helloworld.c:465: error: ‘__Pyx_StringTabEntry’ has no member named ‘n’ 
helloworld.c:476: error: ‘__Pyx_StringTabEntry’ has no member named ‘p’ 
helloworld.c: At top level: 
helloworld.c:485: error: expected ‘)’ before ‘*’ token 
helloworld.c:494: error: expected ‘)’ before ‘*’ token 
helloworld.c:500: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘__pyx_PyInt_AsLongLong’ 
helloworld.c:516: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘__pyx_PyInt_AsUnsignedLongLong’ 
helloworld.c:538: error: expected ‘)’ before ‘*’ token 
helloworld.c:553: error: expected ‘)’ before ‘*’ token 
helloworld.c:568: error: expected ‘)’ before ‘*’ token 
helloworld.c:583: error: expected ‘)’ before ‘*’ token 
helloworld.c:598: error: expected ‘)’ before ‘*’ token 
helloworld.c:613: error: expected ‘)’ before ‘*’ token 
helloworld.c:628: error: expected ‘)’ before ‘*’ token 
helloworld.c:643: error: expected ‘)’ before ‘*’ token 
helloworld.c:658: error: expected ‘)’ before ‘*’ token 
helloworld.c:673: error: expected ‘)’ before ‘*’ token 
helloworld.c:688: error: expected ‘)’ before ‘*’ token 
error: command 'gcc' failed with exit status 1 

Ich habe Python und c ython von Ubuntu 9.04-Repositories installiert. Ich kann nicht verstehen, warum der Compiler Python.h nicht finden kann.

Ich habe versucht zu tun:

cython helloworld.pyx 

und dann Kompilieren das Ergebnis manuell mit gcc:

gcc -shared -pthread -fPIC -fwrapv -O2 -Wall -fno-strict-aliasing -I/usr/include/python2.5 -o helloworld.so helloworld.c 

und bekam die gleiche Meldung genauen Fehler.

Irgendwelche Hinweise?

+0

Haben Sie manuell verifiziert, dass '/ usr/include/python2.6/Python.h' existiert? –

Antwort

4

Sieht so aus, als ob Sie ein Paket wie python_dev oder Ähnliches vermissen - Debian und Derivate (einschließlich Ubuntu) haben es lange vorgezogen, alles zu isolieren, was möglicherweise von "Entwickler" aus den Teilen eines Pakets verwendet werden könnte sind für "alle" ... eine philosophische Haltung, gegen die ich debattieren könnte (und habe debattiert gegen, ohne viel praktischen Erfolg, in mahy Foren), aber eine, die leider nicht einfach ignoriert werden kann :-(

1

Oh verdammt ... vergessen Sie es ...

Ich habe vergessen, die dev-Pakete zu installieren.

Duh. Blöd. Tut mir leid, Leute.