如何判断当前 Python 解释器是 CPython 还是 PyPy

推荐使用 sys.implementation.name 判断解释器类型:值为 "cpython" 或 "pypy";兼容旧版本可用 platform.python_implementation().lower();避免依赖 sys.platform、sys.version_info 等无关字段。

可以通过检查 sys.implementation.nameplatform.python_implementation() 来准确判断当前 Python 解释器是 CPython 还是 PyPy。

推荐方式:使用 sys.implementation.name

这是最直接、轻量且标准的方法,从 Python 3.3 起引入,适用于所有兼容 PEP 421 的实现:

  • sys.implementation.name == "cpython" → 表示运行在 CPython 上
  • sys.implementation.name == "pypy" → 表示运行在 PyPy 上
  • 其他值如 "jython""ironpython" 等也有效

示例代码:

import sys
print(sys.implementation.name) # 输出 'cpython' 或 'pypy'

兼容旧版本:用 platform.python_implementation()

该函数在 Python 2.6+ 就已存在,返回字符串如 "CPython""PyPy"(注意首字母大写):

  • 返回值区分大小写,建议用 .lower() 统一比较
  • 在极老版本或某些嵌入环境中可能不可靠,但日常使用足够稳定

示例代码:

import platform
print(platform.python_implementation().lower()) # 输出 'cpython' 或 'pypy'

辅助验证:看 sys.versionsys.pypy_version_info

这些不是主要判断依据,但可作为交叉验证:

  • sys.version 中包含解释器标识,比如 PyPy 的版本字符串通常含 "PyPy"
  • hasattr(sys, "pypy_version_info")True 基本可确认是 PyPy(CPython 没这个属性)
  • 不建议单独依赖 sys.version 解析,因为格式可能变化

避免误判:不要只看 sys.platform 或编译器信息

这些字段反映的是操作系统或构建环境,和解释器类型无关:

  • sys.platform"linux""win32" 等,不是解释器名
  • sys.version_info 只表示 Python 语言版本(如 3.9、3.11),不区分实现
  • gcc 版本等编译器信息出现在 sys.version 里,但 CPython 和 PyPy 都可能用 gcc 编译

    ,不能据此判断