我的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/

10-12 16:34