這個問題是關於如何從擴展模塊(即用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編譯的。
除了做C等價物檢查'sys.version'(或者只是運行Python代碼)? – delnan
是的,它必須僅僅來自C語言,儘管如果有一種方法可以保證每次導入擴展名時都會執行某些純Python代碼,那也可能工作,但並不理想。 – cjerdonek
我沒有看到問題:導入擴展時運行C代碼,並說C代碼應該能夠使用整個CPython API。但Martijn Pieters無論如何都給出了更有希望的答案。 – delnan