С помощью setuptools ошибка дополнительного модуля расширения C является фатальной

Я потратил немного времени на то, чтобы мой модуль treap (например, dict, но всегда отсортированный по ключу) работал с setuptools 39.0.1.

Я хочу, чтобы он мог скомпилировать и установить версию Cython из включенного файла .c или вернуться к чистой версии Python, если это не удастся.

В настоящее время я использую:

setup(
    name='treap',
    py_modules=[
        'treap',
        'py_treap',
        'nest',
        ],
    # ext_modules=cythonize("pyx_treap.pyx"),
    ext_modules=[Extension('pyx_treap', ['pyx_treap.c'], optional=True)],
    # setup_requires=[
    #     'Cython'
    # ],
    version=version,
    description='Python implementation of treaps,
)

... плюс еще несколько вариантов настройки, которые кажутся неуместными.

Если я запускаю сборку python3.6 setup.py, я получаю:

running build
running build_py
creating build
creating build/lib.linux-x86_64-3.6
copying treap.py -> build/lib.linux-x86_64-3.6
copying py_treap.py -> build/lib.linux-x86_64-3.6
copying nest.py -> build/lib.linux-x86_64-3.6
running build_ext
building 'pyx_treap' extension
creating build/temp.linux-x86_64-3.6
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -g
-fstack-protector-strong -Wformat -Werror=format-security -Wdate-time
-D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/python3.6m -c pyx_treap.c -o
build/temp.linux-x86_64-3.6/pyx_treap.o
pyx_treap.c:4:10: fatal error: Python.h: No such file or directory
 #include "Python.h"
          ^~~~~~~~~~
compilation terminated.
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

Таким образом, похоже, что, несмотря на использование Extension ('pyx_treap', ['pyx_treap.c'], optional = True), версия cython не является необязательной.

Я что-то упускаю? Почему бы просто не продолжить использование чистых модулей Python?

Я понимаю, что могу установить python3.6-dev или аналогичный, чтобы устранить ошибку, но я не хочу предполагать, что пользователь это знает.

Спасибо!


person dstromberg    schedule 29.12.2019    source источник
comment
какая у тебя ОС?   -  person Mahrez BenHamad    schedule 29.12.2019
comment
Linux Mint 19.2.   -  person dstromberg    schedule 30.12.2019
comment
Но я надеюсь, что это сработает над всем, над чем работает Python.   -  person dstromberg    schedule 30.12.2019
comment
Этой версии setuptools исполнилось пару лет. Вы тестировали его с более новой версией?   -  person Kirk Strauser    schedule 16.01.2020