With setuptools, “optional” C extension module error is fatal
![](https://secure.gravatar.com/avatar/83c1cb58fae2faedb80305a0798383d1.jpg?s=120&d=mm&r=g)
Hi folks. (There's a copy of this message on stack overlfow at https://stackoverflow.com/questions/59522262/with-setuptools-optional-c-exte... ) I'm putting a little time into getting my treap module (like a dict, but always sorted by key) working with distutils. I want it to be able to compile and install the Cython version from an included .c file, or to fall back on a pure python version if that fails. I'm currently using: 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, ) ...plus a few more options to setup that don't seem relevant. If I run python3.6 setup.py build, I get: 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 So it seems like despite using Extension('pyx_treap', ['pyx_treap.c'], optional=True), the cython version is not optional. Am I missing something? Why doesn't it just continue with the pure python modules? I realize I could install python3.6-dev or similar to eliminate the error, but I don't want to assume the user knows that. Thanks!
![](https://secure.gravatar.com/avatar/83c1cb58fae2faedb80305a0798383d1.jpg?s=120&d=mm&r=g)
Anyone? On Fri, Jan 3, 2020 at 1:17 PM Dan Stromberg <drsalists@gmail.com> wrote:
Hi folks.
(There's a copy of this message on stack overflow at https://stackoverflow.com/questions/59522262/with-setuptools-optional-c-exte... )
I'm putting a little time into getting my treap module (like a dict, but always sorted by key) working with distutils.
I want it to be able to compile and install the Cython version from an included .c file, or to fall back on a pure python version if that fails.
I'm currently using:
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, )
...plus a few more options to setup that don't seem relevant.
If I run python3.6 setup.py build, I get:
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
So it seems like despite using Extension('pyx_treap', ['pyx_treap.c'], optional=True), the cython version is not optional.
Am I missing something? Why doesn't it just continue with the pure python modules?
I realize I could install python3.6-dev or similar to eliminate the error, but I don't want to assume the user knows that.
Thanks!
participants (1)
-
Dan Stromberg