web-dev-qa-db-ja.com

Cythonのextra_compile_args

extra_compile_argsを使用して、いくつかの追加オプションをCythonコンパイラに渡したいと思います。

私の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を使用します。

16
Roman

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}
)
17
Mike Müller

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