extra_compile_args in Cython

2020-02-26 06:47发布

问题:

I want to pass some extra options to the Cython compiler by using extra_compile_args.

My setup.py:

from distutils.core import setup

from Cython.Build import cythonize

setup(
  name = 'Test app',
  ext_modules = cythonize("test.pyx", language="c++", extra_compile_args=["-O3"]),
)

However, when I run python setup.py build_ext --inplace, I get the following warning:

UserWarning: got unknown compilation option, please remove: extra_compile_args

Question: How does one use extra_compile_args correctly?

I use Cython 0.23.4 under Ubuntu 14.04.3.

回答1:

Use the more traditional way without cythonize to supply extra compiler options:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

setup(
  name = 'Test app',
  ext_modules=[
    Extension('test',
              sources=['test.pyx'],
              extra_compile_args=['-O3'],
              language='c++')
    ],
  cmdclass = {'build_ext': build_ext}
)


回答2:

Mike Muller's answer works, but builds extensions in the current directory, not next to the .pyx file when --inplace is given as in:

python3 setup.py build_ext --inplace

So my workaround is to compose a CFLAGS string and override the env variable:

os.environ['CFLAGS'] = '-O3 -Wall -std=c++11 -I"some/custom/paths"'
setup(ext_modules = cythonize(src_list_pyx, language = 'c++'))


标签: cython