使用 distutils 构建时如何覆盖 Cython 的默认编译标志?

问题描述 投票:0回答:3

我正在 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)。

distutils cython
3个回答
18
投票

extra_compile_args=["-O3"]
中使用
setup.py
-O3
应出现在覆盖它的
-O2
选项之后。检查共享对象(
.so
.dll
)大小以便快速确认。

大卫


2
投票

larsmans 的评论是正确的 - 使用 /usr/bin/cython 解决了我的问题。


0
投票

替代方法:将 特殊标题注释

# distutils: extra_compile_args = -O3
# cython: extra_compile_args = -O0
添加到
.pyx
文件顶部。


详细说明(如下http://docs.cython.org/en/latest/src/quickstart/build.html):

  1. 创建

    hello.pyx
    逐字C代码用于检测是否启用优化)

    cdef extern from *:
        """
        #if __OPTIMIZE__
            int optimizing = 1;
        #else
            int optimizing = 0;
        #endif
        """
        int optimizing
    
    print(optimizing)
    
  2. 运行

    python setup.py build_ext --inplace && python -c "import hello"
    — 输出为
    1

  3. # distutils: extra_compile_args = -O0
    顶部添加
    hello.pyx

  4. 再次运行命令,输出为

    0

© www.soinside.com 2019 - 2024. All rights reserved.