【问题标题】:How can one get the version of the currently-running Python interpreter from within a Python extension module?如何从 Python 扩展模块中获取当前运行的 Python 解释器的版本?
【发布时间】:2013-12-11 23:41:38
【问题描述】:

这个问题是关于如何从扩展模块(即用 C 编写的)中检测用于执行扩展模块的 Python 解释器的版本。

作为背景,在 Python 扩展模块中很容易获得编译扩展所针对的 Python 版本。您可以只使用包含标准 Python 标头 Python.h(例如宏 PY_VERSION)时包含的 macros defined in patchlevel.h 之一。

我的问题是,是否有可能从扩展模块中获取运行时当前用于运行扩展的解释器版本。例如,如果意外使用 Python 2.5 运行针对 Python 2.7 编译的扩展模块,我希望能够在运行时从扩展模块中检测到这一点。具体而言,假设扩展模块是针对 Python 2.7 编译的。

【问题讨论】:

  • 除了做相当于检查sys.version的C(或者只是运行这样做的Python代码)?
  • 是的,它必须只来自 C,但如果有办法保证在导入扩展时执行某些纯 Python 代码,那可能也有效,但不太理想。
  • 我没有看到问题:导入扩展时C代码运行,并且说C代码应该能够使用整个CPython API。但无论如何,Martijn Pieters 给出了一个更有希望的答案。
  • 没有问题。我只是不知道 API 的那一部分。 :)

标签: python python-2.7 extension-modules


【解决方案1】:

使用Py_GetVersion() API

返回此 Python 解释器的版本。这是一个类似于

的字符串
"1.5 (#67, Dec 31 1997, 22:34:28) [GCC 2.7.2.2]"

第一个单词(直到第一个空格字符)是当前 Python 版本;前三个字符是用句点分隔的主要版本和次要版本。返回的字符串指向静态存储;调用者不应修改其值。该值可用于 Python 代码,为 sys.version

【讨论】:

    【解决方案2】:
    猜你喜欢
    • 2011-08-21
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    相关资源
    最近更新 更多