如何判断python解释器是哪一个

使用platform模块的python_implementation函数可以获取python解释器的实现平台,许多人并不知道,python有多个解释器,我们平时所用的是Cpython, 此外还有PyPy, Jython, IronPython他们由其他编程语言实现,绝大部分python代码,不同的解释器都可以执行。

  1. Cpython, 是官方提供的解释器,我们平时所用就是Cpython,它是用C语言开发的,但不要以为底层用C语言开发,它就是最快的。
  2. PyPy, 采用JIT技术,对python代码进行动态编译,这样可以加快python的执行速度,虽然PyPy速度快,但是要注意一点,并不是所有的Cpython代码都可以在PyPy上得到相同的结果,两个解释器存在差异。
  3. Jython, 运行在Java平台上,可以将python代码编译成java字节码来执行
  4. IronPython, 运行在微软.Net平台上,将python代码变异成.Net字节码
  5. Ipython, 基于Cpython开发的解释器,增强了交互性,其他方面与Cpython是一样的

我们平时写代码,不需要关心代码运行在哪个解释器之上,毕竟,大家都在用Cpython。我在阅读pip的源码时,看到pip会检查所运行的解释器是哪一个

try:
    from platform import python_implementation
except ImportError: # pragma: no cover
    def python_implementation():
        """Return a string identifying the Python implementation."""
        if 'PyPy' in sys.version:
            return 'PyPy'
        if os.name == 'java':
            return 'Jython'
        if sys.version.startswith('IronPython'):
            return 'IronPython'
        return 'CPython'

想来是不同的解释器存在一些微小的差异,比如获取解释器的版本,其他解释器下使用platform.python_version()就可以,而对于PyPy则需要对sys.pypy_version_info 进行解析,pip为了可以在任何解释器下都可以执行,因此要在代码里判断运行时所使用的解释器是哪一个。

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案