2015-11-04 7 views
8

Ich möchte einige zusätzliche Optionen an den Cython Compiler übergeben, indem Sie extra_compile_args verwenden.extra_compile_args in Cython

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

Allerdings, wenn ich laufen python setup.py build_ext --inplace, erhalte ich die folgende Warnung:

UserWarning: got unknown compilation option, please remove: extra_compile_args 

Frage: Wie verwendet man extra_compile_args richtig?

Ich verwende Cython 0.23.4 unter Ubuntu 14.04.3.

Antwort

9

Verwenden Sie die traditionellere Weise ohne cythonize zusätzliche Compiler-Optionen zu liefern:

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

Dieser Ansatz scheint'inplace' nicht zu respektieren. Siehe meine Problemumgehung. – Nick

3

Mike Muller Antwort funktioniert, aber Erweiterungen im aktuellen Verzeichnis erstellt, nicht neben die .pyx Datei, wenn --inplace wie in angegeben:

python3 setup.py build_ext --inplace 

So ist meine Abhilfe eine CFLAGS Zeichenfolge zu komponieren und die env Variable außer Kraft setzen:

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