2012-05-27 4 views
9

Ich habe ein Projekt mit einer Reihe von C++ - und Python/Cython-Dateien. Bis jetzt habe ich den C++ Teil primär entwickelt und mit qmake zu einer statischen Bibliothek kompiliert. Einige wenige Methoden werden mit boost :: python bereitgestellt und aus einer .py-Datei ausgeführt.Wie kompiliert man C++/Cython-Projekt am besten in eine ausführbare Datei?

Ich wollte jetzt das Ganze in eine eigenständige ausführbare Datei kompilieren.

Meine Frage jetzt: Was ist der beste Weg, dies zu tun? Ich habe versucht, zu Cython zu wechseln, die Python-Dateien zu kompilieren und die Bibliothek zu verlinken. Aber es scheint, dass es mit distutils/setup.py keinen direkten Weg gibt, eine ausführbare Datei zu kompilieren, sondern nur gemeinsam genutzte Bibliotheken.

Gibt es eine Möglichkeit, einfach sowohl CPP kompilieren und Dateien in eine ausführbare auf einmal .pyx?

Damit ich eine Menge des boost :: python wrapper stuff loswerden kann und einen ordentlichen Mix aus C++/Python bekomme, ohne eine shared library importieren zu müssen und die ganzen Sachen mit pyinstaller zu packen?

+0

Ist der Haupteingangspunkt Ihrer App über die Python-Skripte und der C++ - Teil eine Bibliothek? – jdi

+0

Ja, der Einstiegspunkt ist in Python. Ich schreibe alle teuren Operationen in C++ (die ziemlich viel sind) und füge zusätzliche Funktionalität zu den C++ - Klassen in Python hinzu (Vererbung). Die wichtigsten "Flow", GUI, Netzwerk-Zeug und so weiter ist in Python geschrieben. –

+0

Die Antwort auf [diese Frage] (http://stackoverflow.com/q/2581784/87699) gibt Hinweise zum direkten Kompilieren von Cython zu einer ausführbaren Datei. Ihr Fall ist etwas anders, aber es könnte immer noch nützlich sein. –

Antwort

1

Sie sollten schauen Sie in:

Da Python ist Ihr Einstiegspunkt, können Sie ein bündeln eigenständiger Interpreter, Umgebung und Ressourcenstandort in eine app/exe/binary. Es sammelt alle Ihre Bibliotheksmodule in seine eigenständigen Site-Pakete

Wenn Sie keine normalen reinen py-Dateien verwenden und nur Cython-Dateien haben, dann ist es auch möglich, einen Interpreter in einen von ihnen einzubetten ein Einstiegspunkt mit einer --embed Flagge Cython: http://wiki.cython.org/EmbeddingCython
Hinweis, dies ist ein ähnlicher „Freeze“ -Ansatz zu den bisher Verpackungsoptionen erwähnt, geht aber nicht die zusätzliche Länge, ein selbst zu bauen enthielt env

+0

Ich denke, meine Frage war ein wenig mehrdeutig: Ich würde eine Lösung bevorzugen, wo der Python-Code kompiliert ist (oder auch sein kann). –

+0

Das Packen auf diese Weise verhindert nicht, dass Sie Ihre Cython- und C++ - Erweiterungen kompilieren und bündeln. Sie benötigen noch einen Python-Interpreter, um den Py-Code zu starten. – jdi

+0

@ snøreven: Ja vielleicht vermisse ich etwas über deine Fragen. Versuchen Sie, Ihre cpp + pyx in einem einzigen Modul zu erstellen? Weil du das Wort "ausführbar" von deiner cpp + pyx gesagt hast, was für mich verwirrend ist. Unabhängig davon benötigen Sie einen Interpreter für Ihre Eintrittspunkt-Py-Datei, und die einzige Möglichkeit, Python-Skripte in eigenständige ausführbare Dateien zu erstellen, besteht über diesen Verpackungsansatz. – jdi

Verwandte Themen