Im Gegensatz zu dem, was Adam Matan und andere behaupten, Sie können in der Tat eine ausführbare Binärdatei mit Cython erstellen, von einer reinen Python (Py) Datei.
Ja, Cython soll wie angegeben verwendet werden, um das Schreiben von C / C ++ - Erweiterungsmodulen für die CPython-Python-Laufzeit zu vereinfachen.
Wie Nudzo in diesem Kommentar anspielt , können Sie den --embed
Schalter an der Eingabeaufforderung verwenden.
Hier ist ein äußerst einfaches Beispiel. Ich verwende dies von einer Debian Sid-Workstation aus mit Python3 und Cython3.
Stellen Sie sicher, dass Sie zuvor die Pakete python-dev oder python3-dev installiert haben.
1) Erstellen Sie ein sehr einfaches Python-Programm namens hello.py
$ cat hello.py
drucken ("Hallo Welt!")
2) Verwenden Sie Cython, um Ihr Python-Programm in C ...
cython3 --embed -o hello.c hello.py
3) Verwenden Sie GCC, um hello.c in eine ausführbare Datei namens hello ... zu kompilieren.
gcc -Os -I /usr/include/python3.3m -o hello hello.c -lpython3.3m -lpthread -lm -lutil -ldl
4) Am Ende erhalten Sie eine Datei namens Hallo ...
$ file hallo
Hallo: ELF 64-Bit-LSB-ausführbare Datei, x86-64, Version 1 (SYSV), dynamisch verknüpft (verwendet gemeinsam genutzte Bibliotheken), für GNU / Linux 2.6.32, BuildID [sha1] = 006f45195a26f1949c6ed051df9cbd4433e1ac23, nicht entfernt
$ ldd hello
linux-vdso.so.1 (0x00007fff273fe000)
libpython3.3m.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython3.3m.so.1.0 (0x00007fc61dc2c000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc61da0f000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc61d70b000)
libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007fc61d508000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc61d304000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc61cf5a000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fc61cd52000)
libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007fc61cb28000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fc61c90f000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc61e280000)
In diesem Fall ist die ausführbare Datei auf meinem Debian-System dynamisch mit Python 3.3 verknüpft.
5) lauf hallo ...
$ ./Hallo
Hallo Welt!
Wie Sie sehen, können Sie mit dieser Methode Cython grundsätzlich verwenden, um Ihre reinen Python-Anwendungen in ausführbaren, kompilierten Objektcode zu konvertieren.
Ich verwende diese Methode für wesentlich komplexere Anwendungen - zum Beispiel eine vollständige Python / PySide / Qt-Anwendung.
Für verschiedene Versionen von Python passen Sie das gcc an -I
und -l
wechseln entsprechend.
Sie können die ausführbare Datei dann als Distributionsdatei (.deb usw.) verpacken, ohne die Python / PySide / Qt-Dateien packen zu müssen. Der Vorteil besteht darin, dass Ihre Anwendung auch nach einem Distributionsupdate noch ausgeführt werden kann Versionen von Python usw. auf dieser Distribution.