怎么在Jupyter Notebook中快速查看Python库版本

Jasper
Jasper
发布时间:2026-11-04 | 7人浏览过
原创

详细介绍在Jupyter Notebook中快速查看Python库版本的多种实用方法,涵盖__version__属性、importlib.metadata标准库、%pip魔法命令以及环境一致性排查技巧。

Jupyter Notebook 教程 适用环境:Python 3.8+ / JupyterLab / 原生 Notebook

在 Jupyter Notebook 中查看已安装 Python 库的版本,最快的方式取决于当前的使用场景:如果该库已经在代码中导入或属于高频常用库,可以直接读取其 __version__ 属性;如果不想把整个库载入内存,或者遇到未定义版本属性的轻量库,可以使用 Python 标准库 importlib.metadata.version('库名');而若需要核查物理安装路径、依赖项或解决虚拟环境混淆,则可在 Cell 中使用魔法命令 %pip show 库名。掌握这几种路径的操作细节与底层机制,能够帮助我们在数据分析与项目开发中快速定位依赖冲突。

怎么在Jupyter Notebook中快速查看Python库版本
题图:Jupyter Notebook 快速查看 Python 库版本的主要方法与应用场景

一、单库快速查询:最常用的三种核心方法

在编写数据处理脚本或模型训练代码时,我们经常需要确认当前使用的第三方库(例如 Pandas、NumPy 或 PyTorch)具体是哪个版本,以确保 API 调用的兼容性。针对单个库的版本查询,有以下三种具体做法。

1. 直接读取库的 __version__ 属性

这是 Python 社区最普遍遵循的约定。绝大多数主流第三方库在顶层模块中都预先定义了 __version__ 字符串。如果你的 Notebook 前文中已经导入了该库,这种方法不需要任何额外命令,执行速度处于微秒级别。

import pandas as pd
import numpy as np

print("Pandas 版本:", pd.__version__)
print("NumPy 版本:", np.__version__)
示例运行输出
Pandas 版本: 2.2.1
NumPy 版本: 1.26.4

直接在 Cell 尾行单独书写 pd.__version__ 并按下快捷键 Shift + Enter,Jupyter 会直接以交互式返回值(Out[n])的形式呈现版本字符串。

2. 使用 Python 标准库 importlib.metadata

在某些场景下,目标库体积庞大(例如 TensorFlow、PyTorch、Transformers),单纯为了看一眼版本号而执行 import 会消耗几秒钟的加载时间并占用大量内存;另外也有极少数轻量工具库并未在顶层模块暴露 __version__。此时,使用 Python 3.8 起内置的标准库模块 importlib.metadata 是最规范、最高效的方案。

import importlib.metadata

version_torch = importlib.metadata.version('torch')
print("PyTorch 安装版本:", version_torch)
示例运行输出
PyTorch 安装版本: 2.2.0+cu121

该方法直接读取环境元数据目录(.dist-info 或 .egg-info)中的 METADATA 规范文件,无需解析和载入库的具体 Python 模块,速度非常快,且不会污染全局命名空间。

3. 在单元格中执行 %pip show 魔法命令

如果不仅需要确认版本号,还需要查看该库具体安装在磁盘上的哪个文件夹、它的依赖项有哪些、以及当前环境中有哪些其他包正在依赖它,可以直接在单元格中执行 IPython 提供的 %pip 魔法命令:

%pip show scikit-learn
示例运行输出
Name: scikit-learn
Version: 1.4.1.post1
Summary: A set of python modules for machine learning and data mining
Home-page: https://scikit-learn.org
Author:
Author-email:
License: new BSD
Location: /Users/username/miniconda3/envs/ml_env/lib/python3.10/site-packages
Requires: joblib, numpy, scipy, threadpoolctl
Required-by:

通过其中的 Location 字段,可以直观核对当前 Notebook 调用的到底是不是预期虚拟环境中的包,有效防止不同环境间的包版本串用。

怎么在Jupyter Notebook中快速查看Python库版本
图 1:Jupyter Notebook 库版本查询决策与操作步骤拆解

二、全量环境扫描:批量查看已安装库

当复现他人项目、整理 requirements.txt,或者排查整个开发环境的依赖兼容性时,逐个查询显然效率太低,需要在 Notebook 内部一次性列出所有可用的 Python 库及其版本。

1. 使用 %pip list 快速遍历

在任意代码单元格中输入并执行以下命令:

%pip list

执行后,当前 Kernel 所在 Python 环境安装的所有第三方包将以表格形式完整打印。如果安装的库很多,可以配合 Python 代码过滤,例如筛选出名称中包含特定前缀的包:

import subprocess

# 结合 Python 自身进行精准筛选示例
installed_packages = subprocess.check_output(['%pip', 'list'], shell=True, text=True) # 或直接在 cell 中使用行过滤
# 在 Notebook 原生语法中,更推荐直接配合 Python 列表解析:
import importlib.metadata
[dist.metadata['Name'] + "==" + dist.version for dist in importlib.metadata.distributions() if 'plot' in dist.metadata['Name'].lower()]
示例运行输出
['matplotlib==3.8.3', 'plotly==5.19.0']

2. Conda 用户的 %conda list 区别

如果当前 Jupyter 运行在 Anaconda 或 Miniconda 管理的虚拟环境中,推荐使用 %conda list:

%conda list

相比于 pip,Conda 列表会额外输出每一项的 Build 号与 Channel 来源(例如 conda-forge 或 pypi),这对于排查底层 C/C++ 动态链接库版本冲突(如 MKL、CUDA 工具包)非常有帮助。

怎么在Jupyter Notebook中快速查看Python库版本
图 2:Jupyter 中 4 种主流版本查看方式特性对比矩阵

三、核心机制:为什么在 Notebook 中强烈推荐 %pip 而非 !pip?

许多初学者习惯在 Jupyter 中使用感叹号 ! 执行终端命令,例如 !pip show numpy 或 !pip list。虽然在很多简单单环境下它看似能正常工作,但在涉及虚拟环境(venv、conda)或多 Python 版本的生产机器上,这极易引发混淆。

机制差异说明:
• !pip:Jupyter 会派生一个独立的子系统 Shell(如 /bin/sh 或 cmd.exe),该 Shell 会按照操作系统的 PATH 环境变量来搜索第一个名为 pip 的可执行文件。如果系统的全局 Python 优先存在于 PATH 中,那么 !pip 查看或安装的实际上是全局环境,而非当前 Notebook 内核绑定的环境。
• %pip:IPython 7.3+ 专门引入的增强魔法命令。它在底层会自动将其展开为 sys.executable -m pip,确保 100% 作用于当前正在执行 Notebook 代码的具体 Python 解释器实例。

为了确认当前 Notebook 实际运行在哪一个解释器下,可以在单元格中运行以下标准诊断代码:

import sys
print("当前 Kernel 实际解释器路径:", sys.executable)
示例运行输出
当前 Kernel 实际解释器路径: /Users/username/miniconda3/envs/analysis_env/bin/python

只要确认 %pip show 输出中的 Location 处于上述 sys.executable 对应的虚拟环境目录下,就能杜绝“明明用 pip 安装了包,Notebook 却提示 ModuleNotFoundError”的经典疑难杂症。

怎么在Jupyter Notebook中快速查看Python库版本
图 3:Jupyter 内核运行机制与 %pip vs !pip 执行机制剖析

四、常见问题与避坑清单

在实际操作中,查看库版本偶尔会出现报错或结果不符合预期的情况。以下整理了三类最容易遇到的问题及具体解决措施:

1. 属性报错:AttributeError: module 'xxx' has no attribute '__version__'

原因:PEP 8 和 PEP 396 虽建议第三方包提供 __version__ 属性,但这并非强制技术约束。有些库选择将版本信息维护在别处,或者干脆未暴露该属性。
应对方案:改用 importlib.metadata.version('xxx') 或 %pip show xxx,这两者直接读取 Python 包安装时写入的全局元数据,不依赖库作者是否在 Python 代码中手工赋值 __version__。

2. 包名(Distribution Name)与导入名(Import Name)不一致

表现:执行 importlib.metadata.version('cv2') 提示 PackageNotFoundError: No package metadata was found for cv2。
原因:通过 pip 安装的包分发名(Distribution Name)与 Python 脚本中 import 的模块名(Top-level Module Name)不一定相同。下表列出了开发中最常见的对应关系:

代码中 import 导入名 实际 PyPI 包名(用于 metadata 与 %pip) 正确查询示例
import cv2 opencv-python importlib.metadata.version('opencv-python')
import sklearn scikit-learn %pip show scikit-learn
import yaml pyyaml importlib.metadata.version('pyyaml')
import PIL pillow importlib.metadata.version('pillow')
import bs4 beautifulsoup4 %pip show beautifulsoup4

3. 刚安装或升级了库,但在 Notebook 中查看依然显示旧版本

表现:在终端或通过 %pip install --upgrade 库名 升级成功后,再次运行 print(库名.__version__),输出依然是旧版本号。
原因:Python 解释器在运行过程中会对已导入的模块进行内存缓存(记录在 sys.modules 中)。一旦某个模块在当前 Kernel 启动后被载入过,即便底层磁盘文件被覆盖更新,当前运行中的进程也不会自动重新载入该文件。
应对方案:在 Jupyter 顶部菜单点击 Kernel -> Restart Kernel(或者在命令模式下连续按两次键盘快捷键 0, 0),重启内核释放内存缓存后重新执行导入即可。

怎么在Jupyter Notebook中快速查看Python库版本
图 4:Jupyter 库版本查询核心速查与避坑指南
最佳实践总结:
日常临时核对优先使用 库名.__version__;构建健壮诊断脚本推荐标准库 importlib.metadata.version('包名');涉及跨环境排障与详细依赖审查务必使用 %pip show 包名;切记避免依赖不可控的 !pip。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表