Ich bin ziemlich neu in Cython, aber ich versuche, mehr zu lernen, wie ich in der Lage sein würde, eine ziemlich große und komplizierte Reihe von nennen C/C++ - Code direkt aus Python.Neu bei Cython ... kann nicht scheinen enum richtig zu wrap
Ich konnte die Beispiele OK durchlaufen und konnte sogar einen kleinen Teil des Hauptprojekts, an dem ich arbeite, einpacken. Aber ich habe mich daran gehängt, Enums zu verpacken.
Ich habe versucht, in einem sehr vereinfachten Beispiel auszubrechen, was ich versuche. Hier
ist der C-Code, in myenum.h
// myenum.h
enum strategy {
slow = 0,
medium = 1,
fast = 2
};
Hier ist, was ich dachte funktionieren würde als wapper in pymyenum.pyx
# distutils: language = c
cdef extern from "myenum.h" namespace "myenum":
cdef enum strategy:
slow,
medium,
fast
Und hier ist mein setup.py
from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize(
"pymyenum.pyx", # our Cython source
sources=["myenum.h"], # additional source file(s)
language="c", # generate C code
))
In diesem Verzeichnis betreibe ich
python setup.py build_ext --inplace
und ich bekomme mein pymyenum.so, dass ich importieren kann! Ja! Aber ich kann nicht auf die Strategie zugreifen.
In [1]: import pymyenum
In [2]: pymyenum.
pymyenum.c pymyenum.pyx pymyenum.so
In [2]: pymyenum.strategy
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-2-80980071607b> in <module>()
----> 1 pymyenum.strategy
AttributeError: 'module' object has no attribute 'strategy'
In [3]: from pymyenum import strategy
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-3-9bae6637f005> in <module>()
----> 1 from pymyenum import strategy
ImportError: cannot import name strategy
Ich kann nicht scheinen, das richtige Beispiel zu finden, um mich aus diesem zu befreien. Vielen Dank im Voraus für alle, die helfen können!
Matt
Das hat funktioniert! Vielen Dank! –
Und danke, dass du dir die Zeit genommen hast, mir den Unterschied zwischen "cdef" und "cpdef" zu erklären. Sehr dankbar für die Ausbildung. –
@MattBellis, wenn dies Ihre Frage beantwortet, achten Sie darauf, es als die akzeptierte Antwort zu markieren, indem Sie auf das Häkchen :-) –