怎么查看Python已安装的第三方库及版本信息
pip list(批量查看所有库与版本)和 pip show <库名>(查看单个库的详情与路径);在 Python 代码内部,推荐使用标准库 importlib.metadata.version('库名')。掌握这些工具不仅能快速确认库是否安装,还能有效解决多 Python 环境下的依赖错位问题。
一、命令行全量查看:批量列出所有已安装的库
在日常开发和运维中,最直接的方式是在操作系统终端(Windows 的命令提示符/PowerShell,或者 macOS/Linux 的 Terminal)中运行 pip 相关命令。
1. 格式化表格显示:pip list
执行 pip list 会以两列整齐的表格形式,按字母顺序列出当前 Python 环境下安装的所有包名称和对应版本号:
pip list
如果希望以 JSON 格式输出,方便脚本自动化解析,可以使用 --format=json 参数:
pip list --format=json
2. 导出精确版本清单:pip freeze
很多开发者会使用 pip freeze。它输出的形式是 包名==版本号,非常适合直接重定向到 requirements.txt 文件中用于项目依赖归档:
pip freeze
pip list 默认会列出包含 pip、setuptools、wheel 在内的所有底层构建工具;而 pip freeze 通常会主动忽略这些包,只保留用户自己安装的第三方业务库。
3. 在全量列表中过滤指定库
当安装的包数量多达数百个时,肉眼翻找效率较低,可以配合系统的管道命令进行关键字过滤:
- Windows(PowerShell 或 CMD):使用
findstr筛选:pip list | findstr requests - macOS / Linux:使用
grep筛选:pip list | grep requests
二、单库深入分析:使用 pip show 掌握元数据
在排查程序报错或依赖冲突时,只知道库的版本号往往是不够的。我们需要知道:这个库被安装在了硬盘的哪个具体目录下?它依赖了哪些其他库?又有哪些库依赖了它?
这时候,pip show <库名> 是最具价值的命令。
pip show requests
关键输出字段的排查价值如下:
- Version:当前运行环境中该库的实际安装版本号。
- Location:该库在硬盘中的实际解压与安装路径(
site-packages所在位置)。如果机器上装了多个 Python,可以通过这个路径立刻确定调用的到底是系统 Python、Anaconda 还是 Virtualenv。 - Requires:本库运行必须依赖的其他第三方库。如果这里列出的库缺失,导入时就会报错。
- Required-by:有哪些其他的库依赖了当前库。如果要卸载或者升级某个库,先看这个字段,可以避免破坏上层依赖。
如果需要查看该库具体向系统写入了哪些 .py 文件或可执行脚本,还可以加上 -f(或 --files)参数:
pip show -f requests
三、代码内部动态查看:在 Python 运行时获取版本
在编写自动化脚本、插件系统或需要针对不同库版本兼容不同 API 时,我们通常需要在 Python 代码内部直接读取安装包的版本号。
1. 现代官方标准做法:importlib.metadata(Python 3.8+)
自 Python 3.8 起,官方内置了 importlib.metadata 标准库模块。这是目前最推荐的做法,它有两大显著优势:
- 不需要 import 目标包本身:通过读取包的元数据文件即可获得版本,避免了因为导入重量级大包(如 TensorFlow、PyTorch)而消耗大量内存或触发依赖初始化的开销。
- 官方标准库:无需额外安装任何第三方依赖。
from importlib.metadata import version, PackageNotFoundError
try:
pkg_ver = version("requests")
print(f"requests 已安装,版本为: {pkg_ver}")
except PackageNotFoundError:
print("requests 库尚未安装!")
如果希望遍历当前运行环境中所有已安装的库名称及版本,可以使用 distributions():
from importlib.metadata import distributions
# 打印所有已安装包及版本
for dist in distributions():
print(f"{dist.metadata['Name']} == {dist.version}")
2. 传统属性做法:__version__ 属性
很多第三方库会在自己的顶层包命名空间中定义 __version__ 属性:
import requests
print(requests.__version__)
__version__ 并不是 Python 官方语言层面的强制约束,仅属于社区约定俗成的规范。虽然大部分流行库(如 numpy、pandas、requests、django)都支持,但仍有少数库没有定义该属性,或者将其定义在子模块中。因此,在编写通用检测逻辑时,优先推荐 importlib.metadata.version()。
四、避坑指南:为什么查到了库,代码跑起来却报 No module named?
在所有关于 Python 库版本查看的问题中,最高频的困扰往往是:“在终端执行 pip list 看到某个库明明存在,但一运行 .py 文件就报 ModuleNotFoundError。”
产生这一现象的本质原因,通常是操作系统的环境变量中存在多个 Python 解释器,终端里的 pip 和当前脚本执行的 python 指向了不同的安装路径。
1. 核心解决方案:使用解释器绑定语法
避免多环境混淆的“黄金法则”是:永远不要单独输入裸命令 pip,而是显式使用 python -m pip。
# 绑定当前具体的 python 解释器执行查询
python -m pip list
# 查看指定库的版本与详情
python -m pip show requests
通过在前面加上 python -m,可以保证调用的是当前指定 python 对应的那个 pip,从而确保查到的安装列表与代码执行时加载的库完全一致。
2. 确认当前 Python 和 pip 的实际物理路径
如果系统安装了多个 Python(例如系统自带 Python、官网下载的 Python 3.11、Anaconda、VS Code 虚拟环境),建议先查明路径:
- Windows 终端:
where python where pip - macOS / Linux 终端:
which python3 which pip3 - 在 Python 交互式环境中确认执行路径:
import sys print(sys.executable)
3. 虚拟环境(Virtual Environment)的激活确认
如果你正在使用 venv 或 conda:
- 使用
venv时,确保命令行提示符最前面带有(venv)或虚拟环境文件夹名。未激活状态下执行pip list看到的是全局库,而激活后看到的才是当前隔离项目的专属库。 - 如果使用 Anaconda / Miniconda,可以使用 conda 专用命令快速查看:
conda list
五、常用查询场景与速查参考
为了便于在不同业务场景下快速做出选择,下表整理了各种查看需求所对应的最佳实践命令:
| 查询目标 | 推荐命令 / 代码 | 输出特点与适用场景 |
|---|---|---|
| 列出所有已安装库与版本 | python -m pip list |
整齐对齐的表格形式,适合终端快速排查 |
| 导出项目依赖清单 | pip freeze > requirements.txt |
输出 包名==版本,便于交付与在新机器上复现 |
| 查询单个库的详细信息 | pip show <库名> |
包含真实物理路径(Location)、依赖与被依赖关系 |
| 查询单个库安装的具体文件 | pip show -f <库名> |
列出该包包含的全部具体文件及所在相对路径 |
| 在终端过滤查找指定库 | pip list | grep <库名>(Linux/Mac)pip list | findstr <库名>(Win) |
当已安装库数量较多时,免去翻页查找的麻烦 |
| 在 Python 代码中动态获取 | importlib.metadata.version('库名') |
无需导入库本身即可获取版本,官方推荐标准写法 |
| Conda 环境下查看全部库 | conda list |
同时展示通过 pip 和 conda 安装的混合依赖清单 |
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









