【发布时间】: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