2015-07-14 4 views
11

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

+0

@ Jasper, что вопрос касается возвращения * версии * Python, а не реализации. –

+1

Вы не смогли определить «реализацию», хотя вы сделали с ясностью в своем собственном ответе. – msw

+1

@msw Я не уверен, что согласен. Официальный wiki использует один и тот же язык: https://wiki.python.org/moin/PythonImplementations В любом случае, извинения, если в вопросе была неопределенность. –

ответ

13

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