Sono abbastanza nuovo per Cython ma sto cercando di saperne di più, dato che mi piacerebbe poter chiamare un set abbastanza grande e complicato di Codice C/C++ direttamente da Python.Nuovo per Cython ... non riesco a comprendere correttamente enum
Sono stato in grado di eseguire gli esempi OK e sono stato persino in grado di racchiudere una parte molto piccola del progetto principale su cui sto lavorando. Ma sono rimasto bloccato nel caricare enumerazioni.
Ho provato a rompere quello che sto cercando in un esempio molto semplificato.
Ecco il codice C, in myenum.h
// myenum.h
enum strategy {
slow = 0,
medium = 1,
fast = 2
};
Ecco quello che ho pensato che avrebbe funzionato come un Wapper in pymyenum.pyx
# distutils: language = c
cdef extern from "myenum.h" namespace "myenum":
cdef enum strategy:
slow,
medium,
fast
E qui è la mia 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 questa directory, corro
python setup.py build_ext --inplace
e ottengo il mio pymyenum.so, che posso importare! Si! Ma non riesco ad accedere alla strategia.
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
Non riesco a trovare l'esempio giusto per tirarmi fuori da questo. Grazie in anticipo per tutti coloro che possono aiutare!
Matt
Ha funzionato! Grazie! –
E grazie per aver trovato il tempo di spiegarmi la differenza tra 'cdef' e' cpdef'. Molto riconoscente per l'educazione. –
@MattBellis se questo risponde alla tua domanda assicurati di contrassegnarla come risposta accettata cliccando sul segno di spunta :-) –