Определение реализации Python во время выполнения?

Я пишу фрагмент кода, который возвращает информацию профилирования, и было бы полезно иметь возможность динамически возвращать реализацию используемого Python.

Есть ли способ Pythonic для определения того, какую реализацию (например, Jython, PyPy) Python выполняет мой код во время выполнения? Я знаю, что я могу получить информацию о версии из sys.version :

 >>> import sys >>> sys.version '3.4.3 (default, May 1 2015, 19:14:18) \n[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.49)]' 

но я не уверен, где искать в модуле sys чтобы получить реализацию, выполняемую кодом.

Вы можете использовать python_implementation из модуля platform в Python 3 или Python 2 . Это возвращает строку, которая идентифицирует реализацию Python.

например

return_implementation.py

 import platform print(platform.python_implementation()) 

и повторяя некоторые ответы в командной строке:

 $ for i in python python3 pypy pypy3; do echo -n "implementation $i: "; $i return_implementation.py; done implementation python: CPython implementation python3: CPython implementation pypy: PyPy implementation pypy3: PyPy 

Обратите внимание, что на дату этого ответа возможными ответами являются «CPython», «IronPython», «Jython», «PyPy», что означает, что ваша реализация не будет возвращена этой функцией python_implementation если она не идентична системе sys модуль как один из этих типов.

python_implementation вызывает sys.version под капотом и пытается сопоставить ответ с шаблоном регулярного выражения – если нет условного совпадения, то нет соответствующего ответчика строки.