如何使用Cython创建python可执行文件? (分段故障)

时间:2018-12-23 15:45:09

标签: cython cythonize

我正在尝试建立一个可以编译的cython设置 python源代码转换为可执行文件(应将main方法嵌入其中)-目前,我已设法将其设置为可导入模块,而不是独立可执行文件。

我看到有一个编译器选项Options.embed应该可以解决这个问题。 (在this中说,应将其设置为解释程序应调用的函数-main)

这是模块代码:

def main():
    print('Cython Demo')

if __name__ == '__main__':
    main()

这是设置“ compile.py”代码

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
from Cython.Build import cythonize
from Cython.Compiler import Options

Options.docstrings = False
Options.emit_code_comments = False
Options.embed = "main"

ext_modules = cythonize([
    Extension("cython_demo.mymod.moduleA",["/home/myuser/PycharmProjects/cython_demo/mymod/moduleA.py"])],
    compiler_directives=dict(always_allow_keywords=True,language_level = '3'))

setup(
    name = 'My Program Name',
    cmdclass = {'build_ext': build_ext},
    ext_modules = ext_modules
)

不幸的是,在编译python代码并尝试通过调用以下命令来运行可执行文件后:

./moduleA.cpython-36m-x86_64-linux-gnu.so

我得到了细分错误。

Segmentation fault (core dumped)

我通过在文件上运行grep“ int main”看到了main函数。可能是什么问题?

当我从其他地方导入模块并直接运行main时-它起作用:

import moduleA
moduleA.main()

谢谢!

0 个答案:

没有答案