Cython中的extra_compile_args

时间:2015-11-04 11:25:39

标签: cython

我想使用Cythonextra_compile_args编译器传递一些额外的选项。

我的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"]),
)

但是,当我运行python setup.py build_ext --inplace时,我收到以下警告:

UserWarning: got unknown compilation option, please remove: extra_compile_args

问题:如何正确使用extra_compile_args

我在Cython 0.23.4下使用Ubuntu 14.04.3

3 个答案:

答案 0 :(得分:14)

使用不带cythonize的更传统方式提供额外的编译器选项:

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}
)

答案 1 :(得分:8)

Mike Muller的回答是有效的,但在当前目录中构建扩展,而不是.pyx文件旁边的--inplace,如下所示:

python3 setup.py build_ext --inplace

所以我的解决方法是编写CFLAGS字符串并覆盖env变量:

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

答案 2 :(得分:1)

还有另一种方法可以做到这一点,我发现它是其他两种方法中最好的一种,因为这样你仍然可以以通常的方式使用所有常规的 cythonize 参数:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize

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