Определение реализации 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, чтобы получить реализацию, в которой работает код.

Ответ 1

Вы можете использовать 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 под капотом и пытается сопоставить ответ с шаблоном регулярного выражения - если нет условного соответствия, нет соответствующего строкового ответа.