我正在 Linux 中编译一些 cython 扩展,并注意到在从 distutils 机制构建时它默认使用 -O2。我想知道是否有一种简单的方法可以将其更改为 -O3。
我尝试在扩展对象上使用 extra_compile_args ,但这会导致 -O2 和 -O3 作为参数传递给 gcc。我有点想尝试其他深奥的 gcc 选项,因此希望我可以控制编译步骤。一个明显的问题是“为什么我不直接运行 cython my.pyx 并手动编译结果?”。我很乐意,这是我的答案...但是从命令行运行时, /usr/local/bin/ 中的 cython 可执行文件会抛出 DistributionNotFound: Cython==0.12.1 错误。我还没有完全弄清楚这一点。
无论如何,我不确定它是 cython 的东西,distutils 的东西还是损坏的 apt 包的东西。我只是从 ubuntu 11.10 apt repo 中获取了 cython(目前正在使用 ubuntu 11.10)。
在
extra_compile_args=["-O3"]
中使用 setup.py
,-O3
应出现在覆盖它的 -O2
选项之后。检查共享对象(.so
或.dll
)大小以便快速确认。
大卫
larsmans 的评论是正确的 - 使用 /usr/bin/cython 解决了我的问题。
替代方法:将 特殊标题注释
# distutils: extra_compile_args = -O3
或 # cython: extra_compile_args = -O0
添加到 .pyx
文件顶部。
详细说明(如下http://docs.cython.org/en/latest/src/quickstart/build.html):
创建
hello.pyx
(逐字C代码用于检测是否启用优化)
cdef extern from *:
"""
#if __OPTIMIZE__
int optimizing = 1;
#else
int optimizing = 0;
#endif
"""
int optimizing
print(optimizing)
运行
python setup.py build_ext --inplace && python -c "import hello"
— 输出为 1
。
在
# distutils: extra_compile_args = -O0
顶部添加hello.pyx
。
再次运行命令,输出为
0
。