Non è necessario estendere Python (che non è banale, btw), ma può utilizzare un'interfaccia di funzioni esterne come ctypes .
Voglio invocare quelle funzioni C o eseguibili in Python. È possibile?
Sì, puoi scrivere codice C che può essere importato in Python come modulo. Python chiama questi moduli di estensione . Puoi invocarlo direttamente da Python, un esempio dalla documentazione:
Codice Python
import example
result = example.do_something()
Codice C
static PyObject * example(PyObject *self)
{
// do something
return Py_BuildValue("i", result);
}
Se voglio che il codice C sia una libreria, il che significa che lo uso con #include e il collegamento di *.o probabilmente in Python, come farlo o è possibile.
Lo crei come una libreria condivisa *.dll o *.so Puoi anche indagare usando distutils per distribuire il tuo modulo.
Se scrivo il codice C in eseguibile, il che significa che diventa un comando, posso invocarlo direttamente in Python?
Se scrivi un file *.exe allora stai facendo il contrario (invocando Python da C). Il metodo che scegli (exe vs libreria condivisa) dipende se vuoi un "programma C con un po' di Python" o un "Programma Python con un po' di C" .
Inoltre, ho sentito che il codice Python può essere compilato, significa che possiamo eseguire il codice senza il file sorgente? I file di output sono file binari? Migliora le prestazioni?
Python legge *.py file e compila in *.pyc bytecode file quando lo esegui. Il bytecode viene quindi eseguito nella macchina virtuale Python. Ciò significa "l'esecuzione dello stesso file è più veloce la seconda volta poiché si può evitare la ricompilazione dal sorgente al bytecode." (dal glossario Python) Quindi, se non hai modificato il tuo file *.py file, eseguirà il file *.pyc . Puoi distribuire *.pyc file senza *.py file, tuttavia non sono crittografati e possono essere decodificati.