删除setup.py中的Cython断言选项

时间:2018-10-01 11:25:38

标签: python-3.x cython

我的Cython(.pyx)文件包含assert,我想在编译该文件时将其删除。我找到了this post并按如下方式编辑了setup.py

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

# Before edit
compiler_args = ["-O3", "-ffast-math"]

# Both did not work
# compiler_args = ["-O3", "-ffast-math", "-DPYREX_WITHOUT_ASSERTIONS"]
# compiler_args = ["-O3", "-ffast-math", "-CYTHON_WITHOUT_ASSERTIONS"]

ext_modules = [
               Extension("mycython", sources=["mycython.pyx"],
               extra_compile_args=compiler_args)
              ]

setup(
      name="Test",
      cmdclass={'build_ext': build_ext},
      ext_modules=ext_modules
     )

错误提示:

clang: error: unknown argument: '-CYTHON_WITHOUT_ASSERTIONS'

我该如何解决?

1 个答案:

答案 0 :(得分:2)

CYTHON_WITHOUT_ASSERTIONS是一个预处理程序宏,因此必须使用clang标志将其传递到-D(就像gcc一样)。第一个变量的名称实际上是PYREX_WITHOUT_ASSERTIONS,但是要将其作为宏(即clang编译器的一部分)传递给预处理器,您需要在变量前面添加-D名称。

请改用compiler_args = ["-O3", "-ffast-math", "-DCYTHON_WITHOUT_ASSERTIONS"](请注意D前面的CYTHON_WITHOUT_ASSERTIONS)。

HTH。