Создав библиотеку C, состоящую из множества исходных файлов и файлов заголовков, теперь мне нужно обернуть ее слоем Python, чтобы я мог «импортировать» ее.
Я реализовал статический метод, вызываемый из Python, и мне нужно указать, какие методы модуль должен предоставлять интерпретатору.
Однако, документация , кажется, имеет дело только с очень простым случаем наличия единственного исходного файла, когда дело доходит до указания того, что может быть вызвано, так как единственный нестатический метод должен быть init, который регистрирует методы.
Насколько я могу судить, невозможно вызывать методы в других исходных файлах, если они объявлены как статические в C (пожалуйста, исправьте меня, если я ошибаюсь там), поэтому возможно иметь только один файл C на питон модуль, так как вам разрешен только один нестатический метод в целом.
Это действительно так? Должны ли вы плохо структурировать свой код / нет вообще, если хотите получить к нему доступ из Python?
EDIT:
Итак, в итоге я заработал Cython . Мало того, что переписать интерфейс c / python потребовалось около часа (который раньше занимал около дня из-за всех правил подсчета ссылок и т. Д.), Но он также обрабатывает все проблемы сборки для вас и имеет четкую документацию, описывающую, какие именно методы будут доступны из python.
В частности, главы документации, которые я использовал, были инструкции по сборке , как вызывать библиотеки C , основы языка и как приводить типы, в частности указатели .
Для тех, кто хочет обернуть существующий код C со сложной структурой (то есть что-либо, кроме одного файла) в библиотеку Python, я настоятельно рекомендую Cython.