Как создать исполняемый файл Python с помощью Cython?(Ошибка сегментации) - PullRequest
0 голосов
/ 23 декабря 2018

Я пытаюсь настроить Cython, который скомпилирует исходный код Python в исполняемый файл (он должен включать основной метод внутри) - в настоящее время мне удалось настроить его как импортируемый модуль, но не как автономныйИсполняемый файл.

Я видел, что есть опция компилятора Options.embed, которая должна обрабатывать это.(В этом сообщении сказано, что должно быть установлено значение функции, которую должен вызывать переводчик - 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 напрямую - он работает:

import moduleA
moduleA.main()

Спасибо!

...