我正在尝试建立一个可以编译的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()
谢谢!