Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In Python how do I test if the interpreter is running Pyston, Jython, CPython?

I would like to test from inside a running Python program if the interpreter is running pyston, jython, ironpython, pypy and so on.

The things that come to mind are pattern matching on system.version and checking the magic number from imp.get_magic() But both of these seem a little frail and hacky. Any other suggestions?

Edit: user2357112 comes through again.

I tried running the following code on every Python version I had installed, and this differentiates Jython, Pyston, and various CPythons. Where it falls down is in Python before 2.6, and the anaconda variant of CPython. For anaconda, that may be the right thing though.

Here is the program and the results. Feel free note which other kinds of Python this does or does not work on.

import platform
print(platform.python_implementation())

and shell script:

for v in $(pyenv versions); do # not quite right
    pyenv local $v
    echo "version is $v"
    python /tmp/foo.py
    echo "==================="
done

And I got this output:

===================
version is 2.1.3
Traceback (most recent call last):
  File "/tmp/foo.py", line 1, in ?
    import platform
ImportError: No module named platform
===================
version is 2.2.3
Traceback (most recent call last):
  File "/tmp/foo.py", line 1, in ?
    import platform
ImportError: No module named platform
===================
version is 2.3.7
Traceback (most recent call last):
  File "/tmp/foo.py", line 2, in ?
    print(platform.python_implementation())
AttributeError: 'module' object has no attribute 'python_implementation'
===================
version is 2.4.6
Traceback (most recent call last):
  File "/tmp/foo.py", line 2, in ?
    print(platform.python_implementation())
AttributeError: 'module' object has no attribute 'python_implementation'
===================
version is 2.5.6
Traceback (most recent call last):
  File "/tmp/foo.py", line 2, in <module>
    print(platform.python_implementation())
AttributeError: 'module' object has no attribute 'python_implementation'
===================
version is 2.6.9
CPython
===================
version is 2.7.12
CPython
===================
version is 2.7.13
CPython
===================
version is 2.7.8
CPython
===================
version is 3.0.1
CPython
===================
version is 3.1.5
CPython
===================
version is 3.2.6
CPython
===================
version is 3.3.5
CPython
===================
version is 3.3.6
CPython
===================
version is 3.4.2
CPython
===================
version is 3.5.0
CPython
===================
version is 3.5.1
CPython
===================
version is 3.5.2
CPython
===================
version is 3.6.0
CPython
===================
version is 3.6.0a4
CPython
===================
version is 3.6.0b2
CPython
===================
version is 3.6.1
CPython
===================
version is 3.6.2
CPython
===================
version is 3.7-dev
CPython
===================
version is anaconda2-4.1.1
CPython
===================
version is anaconda3-4.1.0
CPython
===================
version is jython-2.7.1b3
Jython
===================
version is pypy2-5.4.1
PyPy
===================
version is pypy2-5.6.0
PyPy
===================
version is pypy-2.6.1
PyPy
===================
version is pypy3-2.3.1
PyPy
===================
version is pypy3-2.4.0
PyPy
===================
version is pypy3.5-5.8.0
PyPy
===================
version is pypy-5.0.1
PyPy
===================
version is pypy-5.3.1
PyPy
===================
version is pyston-0.6.0
Pyston
===================
version is pyston-0.6.1
Pyston
===================
like image 207
rocky Avatar asked Aug 15 '17 02:08

rocky


1 Answers

As user2357112 mentioned, you can check platform.python_implementation() == "Pyston", as you can see in the source.

like image 166
Francisco Avatar answered Oct 04 '22 20:10

Francisco