использовать Cython для сборки нескольких модулей Python в программу - PullRequest
0 голосов
/ 06 апреля 2019

У меня есть программа на Python (возможно, с расширениями Cython), состоящая из основной программы и одного или нескольких модулей поддержки.

Я знаю, что можно встроить каждый модуль в свой собственный, и основная программа в исполняемый файл , используя cython

Однако я хотел бы собрать программу и модули поддержки в один исполняемый файл. Возможно ли это с помощью Cython в Linux?

1 Ответ

1 голос
/ 06 апреля 2019

Да, это возможно, но требуется небольшой взлом.

Сначала давайте рассмотрим нашу основную программу и вспомогательную библиотеку

cythontest.pyx:

cpdef int square(int n):
return n * n

cythontestmain.pyx

import cythontest
print(cythontest.square(100))

Давайте создадим его с помощью:

cython3 --embed cythontestmain.pyx
cython3 cythontest.pyx
gcc -pthread -fPIC -fwrapv -O2 -Wall -fno-strict-aliasing -I/usr/include/python3.5m -o cythontestmain cythontestmain.c cythontest.c -lpython3.5m

К сожалению, это не работает.Загрузчик не может найти модуль.К счастью, его можно загрузить вручную, добавив пару строк в начало cythontestmain.pyx

cdef extern void * PyInit_cythontest()
PyInit_cythontest()

(тип возвращаемого значения void * не совсем корректен, но так как мы отбрасываем возвращаемый результатзначение в любом случае это вряд ли будет проблемой на практике).

Теперь мы можем успешно собрать и запустить программу.

...