На відміну від тверджень Адама Матана та інших, ви насправді можете створити єдиний виконуваний двійковий файл, використовуючи Cython, із чистого файлу Python (.py).
Так, Cython призначений для використання як зазначено - як спосіб спрощення написання модулів розширення C / C ++ для середовища виконання CPython python.
Але, як натякає нудзо в цьому коментарі , ви можете використовувати --embed
перемикач у командному рядку.
Ось надзвичайно простий приклад. Я виконую це на робочій станції Debian Sid, використовуючи python3 та cython3 ..
Переконайтеся, що заздалегідь встановлені пакети python-dev або python3-dev .
1) Створіть дуже просту програму Python під назвою hello.py
$ cat hello.py
print ("Привіт Світ!")
2) Використовуйте Cython для компіляції вашої програми python в C ...
cython3 --embed -o hello.c hello.py
3) Використовуйте GCC для компіляції hello.c у виконуваний файл, який називається hello ...
gcc -Os -I /usr/include/python3.3m -o hello hello.c -lpython3.3m -lpthread -lm -lutil -ldl
4) Ви отримаєте файл із назвою hello ...
$ файл привіт
привіт: ELF 64-розрядна версія LSB, x86-64, версія 1 (SYSV), динамічно пов’язана (використовує спільні бібліотеки), для GNU / Linux 2.6.32, BuildID [sha1] = 006f45195a26f1949c6ed051df9cbd4433e1ac23, не зачищена
$ 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)
У цьому випадку виконуваний файл динамічно пов'язаний з Python 3.3 у моїй системі Debian.
5) біжи привіт ...
$ ./ привіт
Привіт Світ!
Як бачите, використовуючи цей метод, ви можете в основному використовувати Cython для перетворення ваших чистих програм Python у виконуваний компільований об'єктний код.
Я використовую цей метод для значно складніших програм - наприклад, повнофункціональної програми Python / PySide / Qt.
Для різних версій Python ви пристосовуєте gcc -I
та -l
перемикаєтеся відповідно до вимог .
Потім ви можете упакувати виконуваний файл як файл розподілу (.deb тощо) без необхідності пакувати файли Python / PySide / Qt - перевага полягає в тому, що ваша програма все одно зможе працювати навіть після оновлення дистрибутиву до того самого версії Python тощо для цього дистрибутиву.