Я пишу какое-то расширение Python C. Он использует мою собственную библиотеку *.so и заголовки из другого проекта (допустим, они находятся в /usr/local/lib/otherproject.so
и /usr/local/include/otherproject.h
).
Я не знаю, какой стратегии придерживаться. Я придумал два:
Как чистое расширение Python
Напишите расширение Python C, как описано в официальной документации. Проблема здесь в том, что я не знаю, как связать свою собственную библиотеку и заголовки; для компиляции я пишу файл setup.py и запускаю python3.4 setup.py build
. Я не знаю, могу ли я включить какую-либо опцию в предыдущую команду или могу ли я написать что-то в setup.py, чтобы включить мои заголовки и двоичные файлы (если да, мне также придется беспокоиться о том, чтобы сделать этот дистрибутив?).
С ctypes
Напишите библиотеку C (с системой сборки моего другого проекта). Включите Python, передав '/usr/include/python2.7'
для поиска заголовков и двоичного файла python2.7
. Затем используйте ctypes
, чтобы обернуть эту библиотеку и получить функции, типы, объекты и т. д. Неудобство здесь в том, что мне нужно вручную обернуть каждую отдельную функцию/тип/переменную из ctypes; Я не думаю, что смогу использовать PyModule_AddObject
, так как я создаю модуль не на C, а в оболочке Python (с ctypes).
Кроме того, я попробовал второй подход, но не смог успешно получить свой пользовательский объект PyTypeObject из ctypes. Если второй подход звучит хорошо для любого более опытного мозга здесь, на SO, я бы разместил код, чтобы получить любую помощь =).