Встроенное расширение Cython не может экспортировать типы данных и функции - PullRequest
2 голосов
/ 07 ноября 2011

Мне только что удалось построить мое первое расширение 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

1 Ответ

3 голосов
/ 07 ноября 2011

# объявляет начало строки комментария, поэтому ваш foo.pyx фактически пуст.

include - тупой инструмент.Используйте *.pxd и cimport вместо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...