Мне только что удалось построить мое первое расширение C для Python, используя Cython для вызова в существующую библиотеку C.
Я объявил и определил свои типы данных и функции в логических компонентах (следуя логической структуре библиотеки C) и объединил их в один файл pyx - после того, как произошли ошибки, когда я пытался добавить файлы по отдельности (IIRC, я получил что-то вроде ошибки init уже определено - и после изучения проблемы в Google я обнаружил, что мне нужно объединить все файлы pyx и один файл pyx) - см. эту ссылку .
Это копия содержимого моего файла foo.pyx:
#include "myarray.pyx"
#include "myset.pyx"
#include "mycalc.pyx"
и это копия моего установочного файла:
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("foo", ["foo.pyx"],
libraries=["foo_core"])
]
)
Расширение успешно встроено в foo.so
Затем я могу ввести «import foo» в Python CLI. Это тоже работает. Однако, когда я пытаюсь получить доступ к любому из классов, которые я объявил / определил в myarray.pxd, myarray.pyx и т. Д., Я получаю сообщение об ошибке:
AttributeError: 'module' object has no attribute 'myArray'
Затем я попробовал dir (), чтобы посмотреть, что экспортировал модуль foo. К моему удивлению, это то, что он перечислил:
>>> dir(foo)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__test__']
Почему Cython не может экспортировать структуры, классы и функции, которые я объявил и определил ?. Я не думаю, что что-то не так с моими файлами pxd и pyx, потому что, как я уже сказал, он успешно компилируется и создается общая библиотека (расширение python).
Я использую Cython 0.15.1 и Python 2.6.5 в Ubuntu