如何在cython中编译时删除python断言?

时间:2010-11-26 12:20:13

标签: python assert cython

所以,这是我的问题: 我在python中编码,但我需要提高代码中某些部分的性能,这些部分太慢了。一个好的(简单的)解决方案似乎是使用cython;我试了一下,结果很好。 问题是我在我的python代码中使用assert语句。在使用cython之前,我可以使用-OO选项编译我的python代码,这样我就可以提供一个不执行任何断言测试的版本,并且仍然有调试的断言。但是在cython中编译的文件似乎总是执行断言。是否有一些选项可以传递给cython编译以删除(或不删除)断言?

2 个答案:

答案 0 :(得分:10)

如果定义C预处理器宏PYREX_WITHOUT_ASSERTIONS,Cython会跳过断言。因此在编译生成的C文件时将-DPYREX_WITHOUT_ASSERTIONS传递给C编译器。如何做到这取决于你的构建过程。

答案 1 :(得分:-2)

使用pypreprocessor

也可以在PYPI (Python Package Index)找到,并使用pip获取。

以下是实施:

from pypreprocessor import pypreprocessor

pypreprocessor.parse()

#define debug

#ifdef debug
...place assert to be removed here...
#endif

这基本上与标准C预处理器条件编译的作用相同。

SideNote:这个模块兼容python2x和python3k。

免责声明:我是pypreprocessor的作者。

由于添加了预处理器阶段,这将使初始加载时间延长,但输出的字节码(.pyc)将得到优化。