Chcę wywołać bibliotekę C z aplikacji Python. Nie chcę zawijać całego interfejsu API, tylko funkcje i typy danych, które są odpowiednie w moim przypadku. Widzę, że mam trzy możliwości:
- Utwórz rzeczywisty moduł rozszerzeń w C. Prawdopodobnie przesada, a także chciałbym uniknąć narzutu związanego z nauką pisania rozszerzeń.
- Użyj Cython, aby udostępnić odpowiednie części z biblioteki C Pythonowi.
- Zrób wszystko w Pythonie, używając
ctypes
do komunikacji z biblioteką zewnętrzną.
Nie jestem pewien, czy 2) czy 3) jest lepszym wyborem. Zaletą 3) jest to, że ctypes
jest częścią standardowej biblioteki, a wynikowy kod byłby czystym Pythonem - chociaż nie jestem pewien, jak duża jest ta zaleta.
Czy są jakieś zalety / wady w obu przypadkach? Jakie podejście polecasz?
Edycja: Dzięki za wszystkie odpowiedzi, stanowią one dobry zasób dla każdego, kto chce zrobić coś podobnego. Oczywiście, decyzja musi zostać jeszcze podjęta w sprawie pojedynczej sprawy - nie ma jednej odpowiedzi typu „to jest właściwa”. W moim przypadku prawdopodobnie użyję ctypów, ale nie mogę się doczekać wypróbowania Cython w innym projekcie.
Ponieważ nie ma jednej prawdziwej odpowiedzi, zaakceptowanie jednej jest nieco arbitralne; Wybrałem odpowiedź FogleBirda, ponieważ zapewnia ona dobry wgląd w typy cypla, a obecnie jest również odpowiedzią najczęściej głosowaną. Proponuję jednak przeczytać wszystkie odpowiedzi, aby uzyskać dobry przegląd.
Dzięki jeszcze raz.