使用cython将多个python模块构建到一个程序中

时间:2019-04-06 04:14:47

标签: linux cython

我有一个python程序(可能带有cython扩展名),由一个主程序和一个或多个支持模块组成。

我知道可以将每个模块都构建成自己的模块,并且可以使用cython main program into an executable

但是我想做的是将程序及其支持模块构建到一个可执行文件中。在Linux上使用cython可以做到吗?

1 个答案:

答案 0 :(得分:1)

是的,但是有一点点黑客是必需的。

首先让我们考虑一下我们的主程序和一个支持库

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 *的返回类型不是严格正确的,但是由于我们无论如何都放弃了返回值,因此在实际中这不太可能成为问题)。

我们现在可以成功构建并运行该程序。