应运行import sys; print(sys.executable)获取当前实际python解释器绝对路径,并结合jupyter kernelspec list查看各kernel的argv字段,二者共同决定真实环境;kernel名称不可靠,仅是注册时设定的display name。

在 Jupyter Notebook 里怎么确认当前 Python 环境?
不能只看左上角 Kernel 名字,它可能显示错误或滞后。真正可靠的判断方式是直接查解释器路径和包来源。
-
import sys; print(sys.executable)—— 输出当前正在运行的 Python 解释器绝对路径,比如/Users/xxx/miniconda3/envs/py310/bin/python,这就是你实际所在的环境 -
import os; print(os.environ.get("CONDA_DEFAULT_ENV", "not in conda"))—— 如果在 conda 环境中,会打印环境名;否则返回not in conda -
!which python(Linux/macOS)或!where python(Windows)—— 终端命令,验证 shell 层面的python指向哪
注意:sys.version 只告诉你 Python 版本号,不说明环境归属;conda list 在 notebook 里执行前必须确保已安装 conda 命令且 PATH 正确,否则报错 CommandNotFoundError。
为什么 Kernel 名称不可信?
Kernel 名称(如 Python [conda env:py310])只是注册时填的 display name,不是实时绑定的。常见翻车场景:
- 手动修改过
jupyter kernelspec install的--name参数,但没同步更新实际环境 - 用
python -m ipykernel install --user --name py310安装后,又删掉了对应 conda 环境,Kernel 列表里还残留,点进去就报ModuleNotFoundError - 多个环境都叫
python3(比如系统 Python 和某个 venv),Jupyter 无法区分,全显示为Python 3
所以只要涉及环境切换、调试 import 错误、或部署前校验,务必运行 sys.executable。
如何快速列出所有可用 Kernel?
终端里执行这条命令比在 notebook 里点菜单更准:
jupyter kernelspec list
输出类似:
Available kernels: python3 /Users/xxx/Library/Jupyter/kernels/python3 py310 /Users/xxx/Library/Jupyter/kernels/py310 py39-tf /Users/xxx/Library/Jupyter/kernels/py39-tf
每个路径对应一个 kernel.json 文件,里面记录了 argv 字段——也就是实际调用的 Python 可执行文件路径。这才是最终决定“这个 Kernel 跑在哪”的依据。
别依赖 UI 上的 Kernel 下拉菜单名字,也别只看 notebook 启动时默认选中的是哪个。真实环境只由 sys.executable 和 kernel.json 里的 argv 共同定义,其余全是表象。











