使用 pyximport 时如何设置 Cython 编译器标志?

Posted

技术标签:

【中文标题】使用 pyximport 时如何设置 Cython 编译器标志?【英文标题】:How can I set Cython compiler flags when using pyximport? 【发布时间】:2014-11-09 22:14:59 【问题描述】:

这个问题 (How does one overwrite the default compile flags for Cython when building with distutils?) 描述了在使用 distutils 时如何设置默认 Cython 标志。

但是如果我只使用 pyximport,我该如何设置默认编译标志?

import pyximport
pyximport.install()  # Pass compile flags here somehow?

【问题讨论】:

【参考方案1】:

您应该使用.pyxbld 文件,例如this question。 对于名为 foo.pyx 的文件,您将创建一个 foo.pyxbld 文件。以下将提供额外的优化参数:

def make_ext(modname, pyxfilename):
    from distutils.extension import Extension
    return Extension(name=modname,
                     sources=[pyxfilename],
                     extra_compile_args=['-O3', '-march=native'])

我认为,如果您跳过足够多的障碍(与distribute 混在一起)以获得它喜欢的形式的setup_args,但在pyximport 模块中,我认为可以将额外的设置选项传递给pyximport.install它建议使用.pyxbld 文件的文档,并且在pyximport 的测试代码中仅测试该方法,因此如果有另一种方法,则应将其视为不稳定/未经测试,而应将.pyxbld 视为正确的做法这个。

【讨论】:

.pyxbld 文件是否记录在任何地方?如果是,我找不到它。 好的。它是否记录在人们每天实际使用的任何地方(阅读:我可以通过谷歌等找到的地方)? @FakeName 据我所知,它只是纯文本,您可以在 git 存储库中读取它:github.com/cython/cython/blob/master/pyximport/pyximport.py 或者您可以使用 pdoc 之类的工具将其构建到 html 文件中, 总的来说 Cython 在线文档是随意的,如果你想弄清楚的话,你经常不得不去源文件

以上是关于使用 pyximport 时如何设置 Cython 编译器标志?的主要内容,如果未能解决你的问题,请参考以下文章

使用 pyximport reload_support 重新加载 Cython 不起作用

什么是 pyximport,我应该如何使用它?

cx_Freeze 无法包含 Cython .pyx 模块

如何从 cython 设置文件中删除 -pthread 编译器标志

使用 Cython 时如何将一个 C++ 类(引用)传递给另一个?

Cython:如何使用 C++ 类的用户定义转换?