!pip list只显示pip安装的包,不包含conda安装的包;要查看conda包需用!conda list,而session_info.show()可合并显示所有python包。

在 Jupyter Notebook 里运行 !pip list 只显示 pip 安装的包
这是最常用但最容易误解的操作。你在 Notebook 单元格里写 !pip list 或 %pip list,出来的结果只包含通过 pip install 安装的 Python 包,不包括用 conda install 装的——哪怕它们都在同一个环境里。
原因很简单:pip 只管 site-packages 下的 Python 包;conda 管得更宽,还装 C 库、R 包、编译器工具链等,它把包信息存在自己的数据库里,pip 根本看不到。
- 如果你用的是 Anaconda/Miniconda,默认环境里大量基础库(比如
numpy、pandas)其实是 conda 装的,!pip list就可能漏掉它们 -
%pip list和!pip list效果一样,只是 magic 命令写法不同,别以为前者更“高级” - 输出里看到某个包版本很旧?不一定没更新——可能你上次是用 conda 更新的,pip 不知道
!conda list 才能看见 conda 管理的所有包
想查清当前 conda 环境里到底装了啥,必须用 !conda list。它会列出所有被 conda 记录的包,包括 Python 模块和非 Python 依赖(比如 openssl、libgcc-ng)。
- 如果执行
!conda list报错command not found,说明你没激活 conda 环境,或者没把 conda 加进系统 PATH —— 此时!pip list是唯一能用的选项,但它不完整 -
!conda list --revisions可以看安装历史,适合回滚误操作 - 注意
!conda list输出里的channel列:如果是defaults或conda-forge,说明是正规渠道安装;如果是<develop></develop>或空,可能是本地安装或损坏包
用 session_info.show() 一次性看全所有 Python 包
真正想搞清楚“这个 Notebook 当前能 import 哪些库”,推荐装并运行 session_info:
!pip install session_info import session_info session_info.show()
它会合并 pip list 和 conda list 的 Python 相关部分,过滤掉纯系统依赖,再按字母排序,最后附上 Python 版本和平台信息。
- 输出里每个包只出现一次,即使它既被 pip 又被 conda 安装过(这种情况极少,但真发生了会标出冲突)
- 不显示非 Python 包(比如
curl、zlib),避免干扰判断“哪些能 import” - 如果你用的是 JupyterLab 而不是 classic Notebook,
session_info同样适用,无需额外配置
为什么 help("modules") 不推荐在 Notebook 里用
在 Python 解释器里敲 help("modules") 确实能列出所有可导入模块,但在 Jupyter Notebook 里它会卡住几秒甚至几十秒,尤其当环境里装了上百个包时——因为它要扫描整个 sys.path 并尝试导入每个疑似模块的目录,过程中可能触发副作用(比如初始化某些包的 C 扩展)。
- 输出不可控:有些包会主动屏蔽自己(比如
torch为防止误导入会跳过 help 扫描) - 无法区分来源:你看不出某个模块是 pip 装的、conda 装的,还是系统自带的
- 不能带版本号:只给名字,没法确认是不是你要的那个版本
真正需要快速验证某个库是否存在且可用,直接 import xxx 看报错更准;查列表,老老实实用 session_info.show() 或分头跑 !pip list 和 !conda list。











