2012-05-16 18 views
9

Co chcę zrobić, to naprzeciwko tego, co większość ludzi chce zrobić: mam bibliotekę napisaną w Pythonie i chcę ją udostępnić C (i być może innym językom) .Powiąż bibliotekę Pythona TO C

wiem, że typowa odpowiedź na to jest za pomocą biblioteki Pythona do C, to jest:

#include <Python.h> 

int 
main(int argc, char *argv[]) 
{ 
    Py_Initialize(); 
    PyRun_SimpleString("from time import time,ctime\n" 
        "print 'Today is',ctime(time())\n"); 
    Py_Finalize(); 
    return 0; 
} 

(źródło: http://docs.python.org/extending/embedding.html#very-high-level-embedding)

to jednak wydaje się mniej niż optymalna dla mnie jest:

  • jest brzydki
  • to właśnie dla C

To, czego chcę, to sposób na powiązanie mojej biblioteki z wieloma językami, w tym z C. Nie interesuje mnie automatyczne generowanie opakowania: moja biblioteka jest dość prosta, więc mogę napisać kod z klejem.

W tej chwili jedynym rozwiązaniem, które wymyśliłem, jest użycie kodu podobnego do powyższego w celu związania mojej biblioteki z C. Następnie użyj SWIG, aby powiązać bibliotekę C z innymi językami.

Czy jest lepszy?

Odpowiedz

4

Studnia C to Lingua franca programowania. Powiedziałbym więc, że twoje podejście jest poprawne. Utwórz wiązanie dla języka C i użyj narzędzi takich jak SWIG i FFI innych języków, aby połączyć się z C.

Tylko jeden inny pomysł przychodzi na myśl. Dzisiaj widzimy HTTP wyłaniający się jako nowy Lingua franca dla wszystkich rodzajów interfejsów API i interfejsów. Tak więc można by pomyśleć o stworzeniu małego webservice napisanego w pythonie oferującego interfejs REST. Ale wyraźnie ma to sens tylko w niektórych ustawieniach.

Oczywiście, gdy użytkownik zdecyduje się uruchomić lib Pythona w oddzielnym procesie są wszystkie możliwości komunikacji między procesowej jak potoki nazwane lub gniazd i zestawów narzędzi takich jak Apache Thrift, Google Protocol Buffers lub 0MQ.

+0

Cóż, nie potrzebuję niczego tak fantazyjnego (nie teraz przynajmniej) jako biblioteki działającej jako demon. Więc myślę, że pójdę ręcznie pisząc bibliotekę C, która łączy się z pythona; następnie wykonam wiązania za pomocą SWIG do innych języków. – boyska