我的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'
我该如何解决?
最佳答案
CYTHON_WITHOUT_ASSERTIONS
是一个预处理器宏,因此您必须使用clang
标志将其传递给-D
(就像gcc
一样)。第一个变量的名称实际上是PYREX_WITHOUT_ASSERTIONS
,但是要将其作为宏传递给预处理器(即clang
编译器的一部分),您需要在变量名称之前添加-D
。
尝试使用compiler_args = ["-O3", "-ffast-math", "-DCYTHON_WITHOUT_ASSERTIONS"]
(注意D
前面的CYTHON_WITHOUT_ASSERTIONS
)。
HTH。
关于python-3.x - 删除setup.py中的Cython断言选项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52590073/