Ich weiß, dass Python eine API bereitstellt, damit Sie den Python-Interpreter in C-Code aufrufen können, aber was ich will, ist das Gegenteil.
Mein Programm muss eine C-API verwenden, also muss der Code in C geschrieben sein. Aber ich möchte das Programm auch mit Python paketieren. Das heißt, ich möchte diese C-Funktion oder ausführbaren Dateien in Python aufrufen. Ist das möglich?
Wenn ich möchte, dass der C-Code eine Bibliothek ist, was bedeutet, dass ich ihn mit verwende #include
und Verknüpfung der *.o
wahrscheinlich in Python, wie geht das? Ist das möglich? Wenn ich den C-Code in eine ausführbare Datei schreibe, was bedeutet, dass er zu einem Befehl wird, kann ich ihn dann direkt in Python aufrufen?
Außerdem habe ich gehört, dass Python-Code kompiliert werden kann. Bedeutet das, dass wir den Code ohne die Quelldatei ausführen können? Sind die Ausgabedateien Binärdateien? Verbessert es die Leistung?
Ich möchte diese C-Funktion oder ausführbare Dateien in Python aufrufen. Ist das möglich.
Ja, Sie können C-Code schreiben, der als Modul in Python importiert werden kann. Python ruft diese auf Erweiterungsmodule. Sie können es direkt aus Python aufrufen, ein Beispiel aus der Dokumentation:
Python-Code
import example
result = example.do_something()
C-Code
static PyObject * example(PyObject *self)
{
// do something
return Py_BuildValue("i", result);
}
Wenn ich möchte, dass der C-Code eine Bibliothek ist, was bedeutet, dass ich ihn mit #include und Verknüpfung des *.o wahrscheinlich in Python verwende, wie geht das oder ist das möglich?
Sie erstellen es als gemeinsam genutzte Bibliothek *.dll oder *.Also
Sie können auch die Verwendung von distutils zum Verteilen Ihres Moduls untersuchen.
Wenn ich den C-Code in eine ausführbare Datei schreibe, was bedeutet, dass er zu einem Befehl wird, kann ich ihn dann direkt in Python aufrufen?
Wenn du a schreibst *.exe dann machst du das gegenteil (aufrufen Python von C). Die von Ihnen gewählte Methode (exe vs. gemeinsam genutzte Bibliothek) hängt davon ab, ob Sie eine “C-Programm mit etwas Python” oder ein “Python-Programm mit etwas C”.
Außerdem habe ich gehört, dass Python-Code kompiliert werden kann. Bedeutet das, dass wir den Code ohne die Quelldatei ausführen können? Sind die Ausgabedateien Binärdateien? Verbessert es die Leistung?
Python liest *.py Dateien und kompiliert zu *.pyc Bytecode Dateien, wenn Sie es ausführen. Der Bytecode wird dann in der virtuellen Python-Maschine ausgeführt. Das heisst “Das Ausführen derselben Datei ist beim zweiten Mal schneller, da eine Neukompilierung von der Quelle zum Bytecode vermieden werden kann.” (aus dem Python-Glossar) Also, wenn Sie Ihre nicht bearbeitet haben *.py Dateien, es wird die ausgeführt *.pyc. Sie können verteilen *.pyc Dateien ohne *.py Dateien, sie sind jedoch nicht verschlüsselt und können rückentwickelt werden.
Sie müssen nicht unbedingt erweitern Python (was übrigens nicht trivial ist), kann aber fremde Funktionsschnittstellen wie z ctypen.
Es gibt ein ganzes Kapitel in der Python-Dokumentation zu diesem Thema: docs.python.org/3.3/extending/index.html
– Karsten
12. September 2013 um 11:13 Uhr
Speziell: docs.python.org/3.3/extending/…
– TJ Crowder
12. September 2013 um 11:16 Uhr
interessant, wie einige Fragen nicht zum Thema gehören, aber die Dupes nicht: stackoverflow.com/questions/145270/calling-cc-from-python 🙂
– Ciro Santilli OurBigBook.com
16. August 2018 um 8:26 Uhr