2011-08-18 15 views
31

Ho enormi moduli Python (+8000 linee). Fondamentalmente hanno tonnellate di funzioni per interagire con una piattaforma hardware tramite porta seriale leggendo e scrivendo su registri hardware.Usa Cython come convertitore da Python a C

Non sono algoritmi numerici. Quindi l'applicazione è solo in lettura/scrittura su registri hardware/memoria. Io uso queste librerie per scrivere script personalizzati. Alla fine, ho bisogno di spostare tutte queste cose da eseguire in un processore embedded sul mio hardware per avere un controllo più preciso, quindi lancio l'evento dal PC e il resto è in hardware.

Quindi ho bisogno di convertirli in C.Se posso avere i miei script convertiti in C da uno strumento automatico, che mi farebbe risparmiare un tempo enorme. Questo è il motivo per cui sono stato attratto da Cython. L'efficienza non è importante, i miei codici non sono crunch numerici. Ma il codice generato dovrebbe essere relativamente piccolo per adattarsi alla mia memoria limitata (poche centinaia di Kilobyte).

Posso usare Cython come convertitore per i miei script personalizzati Python su C? La mia ipotesi è sì, nel qual caso posso usare questi file .c per essere eseguiti nel mio hardware? La mia ipotesi non è che devo avere Cython nel mio hardware per farli funzionare. Ma se solo crei alcuni file .c, posso farlo e renderlo indipendente dal momento che il codice non usa molte delle funzionalità di Python ma lo usa come uno script veloce da implementare.

+0

Qualcuno ha avuto qualche successo in realtà facendo questo? Ritengo che sarebbe molto difficile eseguire il debug. Voglio davvero farlo da solo con Cython/PyPy, ma sembra che potrebbe essere molto interessante testare ... – radix07

risposta

40
  1. Sì, al suo interno questo è ciò che fa Cython. Ma ...
  2. Non hai bisogno di Cython, tuttavia, hai bisogno di libpython. Potresti pensare che non usi molte funzionalità di Python, ma penso che se lo proverai scoprirai che non è vero - non sarai in grado di separare il tuo programma dalla sua dipendenza su libpython mentre stai ancora usando Python linguaggio.

Un'altra opzione è PyPy, in particolare è translation toolchain, NON l'interprete Python PyPy. Ti permette di tradurre RPython, un sottoinsieme del linguaggio Python, in C. Se davvero non stai usando molte funzionalità o librerie del linguaggio Python, questo potrebbe funzionare.

PyPy è principalmente noto come un'implementazione Python alternativa, ma è anche un insieme di strumenti per la compilazione di linguaggi dinamici in varie forme. Questo è ciò che consente l'implementazione Python di Python, scritta in (R) Python, da compilare in codice macchina.

Se C++ è disponibile, Nuitka è un compilatore da Python a C++ che funziona per Python normale, non solo per RPython (che è ciò che usano shedskin e PyPy).

+0

Quindi è un traduttore che ti dà .c? Ho pensato sia l'implementazione specifica di python per renderla veloce. La fretta non è la mia preoccupazione. –

+0

Leggi la risposta più da vicino. PyPy è __two things__, un'implementazione di Python e un traduttore/compilatore Python. Non vuoi il primo, vuoi il secondo. La toolchain di traduzione che ho collegato contiene dettagli su ciò che desideri. – agf

+1

Ho aggiornato il mio post per aggiungere risposte dirette alle vostre domande. – agf

2

Se C++ è disponibile per quella piattaforma incorporata, c'è shed skin, converte python in C++.

+2

Ho sentito parlare di ShedSkin ma non mi fido. Cython sembra essere più robusto e ampiamente utilizzato con recensioni molto positive . –

+0

Per C++, c'è anche Pythran. – boardrider