替代 python-config 可从 Python 中调用

Alternative to python-config callable from within Python

我想要一个 Python 脚本构建一个 Python C 扩展模块,用于脚本 运行 所使用的 Python 解释器的任何版本。

为此,我想动态获取相关的 C 编译器标志 - 实现此目的的一种方法是获取 python-config CLI 工具的输出,例如像这样:

subprocess.check_output(["python-config", "--includes"])

不幸的是,在安装了多个版本Python的系统上,此方法可能无法找到正确的python-config——也就是说,与当前关联的python-config -运行宁版Python。 (此外,从方法论上讲,它有点难看。)

有什么方法可以让我从 Python 中获取这些信息——可能类似于 Numpy 的 get_include

我有答案:它是内置的sysconfig模块。

…提供访问相同信息的方法python-config提供,包括但不限于:

  • get_python_version()(如你所想),
  • get_paths()(产生具有许多有用路径的 dict),
  • get_config_var()get_config_vars()(这些 return 字符串和一个巨大的 dict 分别用于筛选所有低级配置选项),
  • get_config_h_filename()(生成源 config.h 文件),
  • parse_config_h()(仅适用于最勇敢的配置管道工)

…前两个可能就足够了,对于任何寻求 python-config 价值而不必通过令人尴尬的 subprocess 舞蹈来获得它的人来说。