Jupyter Notebook中查看Python内核版本的方法
sys 或 platform 模块代码,或者通过系统命令核对内核环境。
为什么界面上的“Python 3”不够具体
打开一个 Notebook 文件时,右上角状态栏往往仅标示“Python 3 (ipykernel)”。这里的名称仅仅是内核配置文件(kernel.json)中预设的显示别名(display_name),并非当前 Python 进程的动态查询结果。
Jupyter 遵循客户端与服务端的解耦架构。浏览器中操作的 Notebook 是前端交互界面,所有运算指令通过网络协议发送至独立的后台内核(Kernel)进程执行。如果系统中同时存在 Anaconda 环境、系统默认 Python 以及多个虚拟环境,前端所连接的内核很可能并不是终端中默认敲击 python 命令启动的那个解释器。因此,只有让当前内核进程亲自执行查询语句,才能得到 100% 准确的运行时版本信息。
方法一:使用 sys 模块(信息最全面,首选推荐)
Python 内置的 sys 模块提供了当前解释器的核心运行时参数。在任意代码单元格中输入并运行以下代码,即可打印完整的版本字符串以及当前内核所绑定的 Python 解释器绝对路径:
import sys
print("当前 Python 版本信息:")
print(sys.version)
print("\n解释器可执行文件绝对路径:")
print(sys.executable)
当前 Python 版本信息:
3.10.12 (main, Jun 11 2023, 05:26:28) [Clang 15.0.0 (clang-1500.0.40.1)]
解释器可执行文件绝对路径:
/Users/developer/miniconda3/envs/data_analysis/bin/python
核心输出解读:
-
sys.version: 第一部分直接给出形如3.10.12的具体版本号,括号内附带编译时间、编译器平台及版本(如 GCC 或 Clang)。如果使用的是 Anaconda 发行版,这里还会注明packaged by conda-forge等发行商信息。 -
sys.executable: 极其关键的属性。它明确指出了当前内核究竟启动的是哪一个 Python 二进制文件。通过观察路径中包含的目录名(例如/envs/data_analysis/),可以立刻核对当前内核是否正确绑定到了预期的 Conda 虚拟环境或 virtualenv 环境中。
方法二:使用 platform 模块(版本号干净纯粹)
如果只需要获取纯粹的版本数字字符串(例如用于自动化逻辑检查、断言判断当前是否高于 Python 3.9),使用内置的 platform 模块会更加清晰便捷:
import platform
print("Python 主版本号:", platform.python_version())
print("Python 版本元组:", platform.python_version_tuple())
Python 主版本号: 3.10.12
Python 版本元组: ('3', '10', '12')
platform.python_version() 直接返回标准的三段式版本字符串 '3.10.12',不包含编译器和杂项文本,省去了手动切片字符串的步骤。
方法三:使用命令行语法(避坑重点)
在 Notebook 单元格中,以感叹号 ! 开头可以直接调用底层操作系统的 Shell 执行外部命令。很多读者习惯直接输入:
!python --version
!python --version 所返回的版本,并不一定等同于 当前 Notebook 代码所运行的内核版本!
原因剖析:
当在单元格里敲下 !command 时,Jupyter 后台内核会派生一个全新的子进程 Shell(例如 /bin/sh 或 cmd.exe)。该 Shell 会根据系统当前全局的 PATH 环境变量去检索名为 python 的可执行程序。
如果启动 Jupyter Notebook 服务的环境与当前 Notebook 所选的 Kernel 属于不同的虚拟环境,!python 调用的将是宿主系统环境中的全局 Python,从而产生“代码运行报错提示特性不支持,但 !python --version 显示版本足够高”的困惑。
正确无误的命令行写法: 将 sys.executable 变量代入命令行执行:
import sys
!{sys.executable} --version
Python 3.10.12
通过 {sys.executable} 插值语法,Shell 命令被强制指向当前内核绑定的具体二进制文件,此时返回的才是绝对真实的内核版本。
方法四:查看系统中已注册的所有内核及对应版本
当想要了解整个 Jupyter 体系下到底注册了多少个 Python 内核,以及各自绑定在哪个环境时,可以在系统的外部终端(Terminal)或 Notebook 的单元格中运行:
!jupyter kernelspec list
Available kernels:
python3 /Users/developer/Library/Jupyter/kernels/python3
pt_env /Users/developer/Library/Jupyter/kernels/pt_env
spider_env /Users/developer/Library/Jupyter/kernels/spider_env
每个内核目录下都存在一个 kernel.json 文件。如果直接查看对应目录下的配置文件(例如 cat .../kernels/pt_env/kernel.json),即可发现其内部的 argv 列表直接指定了调用该内核的具体解释器路径:
{
"argv": [
"/Users/developer/miniconda3/envs/pt_env/bin/python",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}"
],
"display_name": "Python (PyTorch-GPU)",
"language": "python"
}
常见问题与排查思路
1. 查看发现当前内核版本过低或不符合预期,如何切换?
在 Jupyter Notebook 顶部菜单栏中,依次点击 Kernel -> Change Kernel,即可在弹出的可用内核列表中选择目标虚拟环境。如果没有找到想要的内核,说明该虚拟环境尚未向 Jupyter 注册 ipykernel。
2. 如何将指定的虚拟环境添加到 Jupyter 内核列表中?
在终端中激活目标虚拟环境,安装 ipykernel 并将其注册到当前用户空间:
# 激活虚拟环境 (以 conda 为例)
conda activate my_target_env
# 安装内核支持工具
conda install ipykernel # 或 pip install ipykernel
# 执行注册命令,指定在 Notebook 中显示的友好名称
python -m ipykernel install --user --name my_target_env --display-name "Python (my_target_env)"
注册完成后,刷新 Jupyter Notebook 页面,即可在内核切换列表中选择新注册的环境,并再次使用 sys.version 验证生效情况。
方法总结与速查对比
| 查看方法 | 主要调用语句 | 输出内容要点 | 适用场景与推荐度 |
|---|---|---|---|
| sys 模块 | import sys; print(sys.version, sys.executable) |
完整版本号、编译器参数及解释器绝对路径 | 最全面,能排查虚拟环境指向错误(⭐⭐⭐⭐⭐ 首选) |
| platform 模块 | import platform; print(platform.python_version()) |
纯净的 '3.x.x' 版本号字符串 | 适合脚本中进行版本阈值逻辑判断(⭐⭐⭐⭐) |
| 命令插值调用 | !{sys.executable} -V |
纯文本版本号 | 快速外接命令行验证,避免环境变量污染(⭐⭐⭐⭐) |
| 内核规范列表 | !jupyter kernelspec list |
所有已注册内核的名称及配置文件存放路径 | 管理并全局排查多内核映射关系时使用(⭐⭐⭐) |
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













