Können wir C-Code in Python verwenden?

Lesezeit: 3 Minuten

Benutzeravatar von dspjm
dspjm

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?

  • 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

Benutzeravatar von Jacqui Gurto
Jacqui Gurto

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.

  • +1 – Ich liebe Antworten, die Dinge tatsächlich erklären (Links sind nett, aber ich dachte, dies sei eine prägnante und hilfreiche Übersicht)

    – mdscruggs

    12. September 2013 um 13:12 Uhr

Sie müssen nicht unbedingt erweitern Python (was übrigens nicht trivial ist), kann aber fremde Funktionsschnittstellen wie z ctypen.

  • ctypes ist viel langsamer als c-ext

    – Tom Sawyer

    11. Mai 2020 um 9:32 Uhr

1415300cookie-checkKönnen wir C-Code in Python verwenden?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy