如何从Python distutils获取特定的C编译器类型?

5
我想在Python中检查系统的C编译器,以便我可以添加库链接来编译我的Cython代码。我知道distutils.ccompiler.get_default_compiler()或类似compiler.compiler_type的方法会返回一个编译器名称。但这太粗略了,只是像“unix”等。我需要更具体的信息,例如“gcc”,“icc”,“clang”等,这些都使用上述方法显示为“unix”。获取信息的一种可能的方式是通过os.environ[“CC”]检查系统的环境变量CC,但不能保证每个系统都定义了CC,因此它不是通用解决方案。那么,我该怎么办呢?先谢谢!
2个回答

3

通常您可以使用platform模块获取信息:

>>> import platform
>>> platform.python_compiler()
'GCC 4.8.5 20150623 (Red Hat 4.8.5-4)'

谢谢!但是看起来这将返回系统的默认编译器,例如在我的系统中,位于/usr/bin的基本GCC版本。当import pyximport; pyximport.install()时,这是Cython将使用的编译器吗?用户可能有其他编译器用作默认编译器(例如由他/她自己指定的CC环境变量),我该如何获取它? - YDW
通常情况下,从Python的distutils.sysconfig.get_config_var('CC')变量返回的内容只有"cc"。如果你在disutils命令中没有看到任何设置,那么它很可能被设置为默认编译器,该编译器输出来自os.system('cc -v')的结果,而默认值应该与platform的输出匹配。 - l'L'l
听起来很合理。所以我的最终解决方案是两步的:首先检查CC是否设置,如果是,则读取os.environ["CC"];如果不是,则从distutils.sysconfig.get_config_var('CC')获取信息。 - YDW

2
你可以使用 distutils 来获取实际的 C 编译器并读取其属性。
from distutils.ccompiler import new_compiler
from distutils.sysconfig import customize_compiler
ccompiler = new_compiler()
customize_compiler(ccompiler)

path_to_compiler = ccompiler.compiler[0]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接