2013-11-26 42 views
2

這個問題是關於如何從擴展模塊(即用C語言編寫的)中檢測用於執行擴展模塊的Python解釋器的版本。如何從Python擴展模塊中獲取當前正在運行的Python解釋器的版本?

作爲背景,在Python擴展模塊內部可以直接獲取編譯擴展的Python版本。在包含標準Python頭文件Python.h(例如,宏PY_VERSION)時,您可以使用macros defined in patchlevel.h之一。

我的問題是,是否可以從擴展模塊中獲取運行時版本的當前用於運行擴展的解釋器。例如,如果Python 2.5被意外地用於運行一個針對Python 2.7編譯的擴展模塊,我希望能夠在擴展模塊內的運行時檢測到它。爲了具體,我們假設擴展模塊是針對Python 2.7編譯的。

+0

除了做C等價物檢查'sys.version'(或者只是運行Python代碼)? – delnan

+0

是的,它必須僅僅來自C語言,儘管如果有一種方法可以保證每次導入擴展名時都會執行某些純Python代碼,那也可能工作,但並不理想。 – cjerdonek

+0

我沒有看到問題:導入擴展時運行C代碼,並說C代碼應該能夠使用整個CPython API。但Martijn Pieters無論如何都給出了更有希望的答案。 – delnan

回答

2

使用Py_GetVersion() API

返回此Python解釋器的版本。這是一個字符串,看起來像

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

的第一個字(直到第一個空格字符)是目前Python版本;前三個字符是由句點分隔的主要和次要版本。返回的字符串指向靜態存儲;調用者不應該修改其值。該值可用於Python代碼sys.version

相關問題