Вопреки утверждениям Адама Матана и других, вы можете фактически создать один исполняемый двоичный файл с использованием Cython из чистого файла Python (.py).
Да, Cython предназначен для использования, как указано - как способ упрощения написания модулей расширения C / C ++ для среды выполнения Python CPython.
Но, как намекает нудзо в этом комментарии , вы можете использовать переключатель --embed
в командной строке.
Вот очень простой пример.Я выполняю это на рабочей станции Debian Sid, используя python3 и cython3 ..
Убедитесь, что у вас заранее установлены python-dev или python3-dev пакеты.
1) Создать очень простую программу на Python с именем hello.py
$ cat hello.py
print(«Hello World!»)
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 ...
$ file hello
hello: исполняемый 64-разрядный LSB ELF, 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) run привет ...
$ ./hello
Hello World!
Как видитеИспользуя этот метод, вы можете в основном использовать Cython для преобразования ваших чистых Python-приложений в исполняемый, скомпилированный объектный код.
Я использую этот метод для значительно более сложных приложений - например, для полноценного Python / PySide / Qtapplication.
Для различных версий Python вы настраиваете gcc -I
и -l
в соответствии с требованиями.
Затем вы можетеупакуйте исполняемый файл в файл дистрибутива (.deb и т. д.), не упаковывая файлы Python / PySide / Qt - преимущество заключается в том, что ваше приложение должно работать даже после обновления дистрибутива до тех же версий Pythonи т. д. в этом распределении.