gpt4 book ai didi

cython - 如何在定义 cython 扩展之前识别编译器?

转载 作者:行者123 更新时间:2023-12-04 20:38:26 33 4
gpt4 key购买 nike

我正在构建一个独立于平台的 cython 项目,我想根据正在使用的编译器传递编译器参数。我可以猜测基于平台的编译器,或者假设它与用于 Python 的编译器相同,但不能保证匹配。通常我注入(inject) cmdclass arg 到 setuptool 的 setup 方法并包装 install 或 build_ext 命令以检查内部状态。但在这种情况下,我必须在到达包装器之前对扩展模块进行 cythonize。

在对扩展模块进行 cythonizing 之前,有什么方法可以确定 setup.py 中的编译器吗?

最佳答案

在 cython 论坛上发帖并在 distutils 中搜索相关问题后,我发现 this post展示如何将编译器参数移动到 build_ext 赋值中。如果我随后从扩展类中删除所有编译器参数,我现在可以按照我的预期在命令类中延迟分配它们。我也可以得到installegg_info命令类也可以调用我的新版本 build_ext。

from setuptools.command.build_ext import build_ext

BUILD_ARGS = defaultdict(lambda: ['-O3', '-g0'])
for compiler, args in [
('msvc', ['/EHsc', '/DHUNSPELL_STATIC']),
('gcc', ['-O3', '-g0'])]:
BUILD_ARGS[compiler] = args

class build_ext_compiler_check(build_ext):
def build_extensions(self):
compiler = self.compiler.compiler_type
args = BUILD_ARGS[compiler]
for ext in self.extensions:
ext.extra_compile_args = args
build_ext.build_extensions(self)

...
setup(
...
cmdclass={ 'build_ext': build_ext_compiler_check })

关于cython - 如何在定义 cython 扩展之前识别编译器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30985862/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com