extra_compile_args

问题描述 投票:0回答:4

我想使用

Cython
extra_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

cython
4个回答
21
投票

使用更传统的方式而不使用

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

16
投票

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++'))

7
投票

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

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++",
        ),
    ),
)

0
投票

替代方案(一般不适用,但如果您只想更改一个文件,可能会很有用):

特殊标题注释

# distutils: extra_compile_args = -O3
# cython: extra_compile_args = -O0
添加到
.pyx
文件顶部。


详细说明(如下http://docs.cython.org/en/latest/src/quickstart/build.html):

  1. 创建

    hello.pyx
    逐字C代码用于检测是否启用优化)

    cdef extern from *:
        """
        #if __OPTIMIZE__
            int optimizing = 1;
        #else
            int optimizing = 0;
        #endif
        """
        int optimizing
    
    print(optimizing)
    
  2. 运行

    python setup.py build_ext --inplace && python -c "import hello"
    — 输出为
    1

  3. # distutils: extra_compile_args = -O0
    顶部添加
    hello.pyx

  4. 再次运行命令,输出为

    0

© www.soinside.com 2019 - 2024. All rights reserved.