我的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'
我该如何解决?
答案 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。