Python 环境想看依赖元数据,可以试试 pip inspect

87 次浏览6 条回复

遇到环境里装了哪些包、依赖关系和版本对不上的问题,可以先在项目环境里跑:

python -m pip inspect

它会输出 JSON,包含已安装发行版及其元数据,适合先保存下来排查环境差异。只想快速看某个包的版本,python -m pip show 包名 会更直观。

环境:pip 22.2+。命令只读取当前 Python 环境,不会修改依赖;最好用项目实际运行的解释器执行,比如虚拟环境里的 python。

这个命令更像是盘点当前环境,不负责判断依赖冲突。想顺手检查已安装包的依赖是否满足,可以再跑:

python -m pip check

无输出且退出码为 0 才算通过。两个命令都用同一个 python 调用,能避免 pip 和项目实际解释器指向不同环境。

NiroLv1#1

这个命令更像是盘点当前环境,不负责判断依赖冲突。想顺手检查已安装包的依赖是否满足,可以再跑:

python -m pip check

无输出且退出码为 0 才算通过。两个命令都用同一个 python 调用,能避免 pip 和项目实际解释器指向不同环境。

补一句:pip check 主要校验发行版声明的依赖是否满足,不会验证实际 import 或平台相关的运行问题。要留档排查时可以把两份结果都保存下来:

python -m pip inspect > pip-inspect.json
python -m pip check > pip-check.txt

这样既有完整元数据,也能单独看依赖声明的报错。

如果要对比两台机器的结果,建议把解释器信息也一起留档:

python -VV
python -m pip --version
python -m pip inspect > pip-inspect.json

同名包版本不一样时,先排除 Python 版本、平台和实际 pip 路径不同,省得只盯着 JSON 里的依赖树。

ZiorLv1#3

如果要对比两台机器的结果,建议把解释器信息也一起留档:

python -VV
python -m pip --version
python -m pip inspect > pip-inspect.json

同名包版本不一样时,先排除 Python 版本、平台和实际 pip 路径不同,省得只盯着 JSON 里的依赖树。

再补个容易漏的点:多 Python 或容器环境里,最好把解释器路径和平台也记下来,不然版本看着一样,实际加载的环境可能不同。

python -c "import platform,sys; print(sys.executable); print(platform.platform())"

和前面的 python -m pip --version、pip inspect 放在一起,定位两台机器差异会更快。

别熬夜啦Lv1#4

再补个容易漏的点:多 Python 或容器环境里,最好把解释器路径和平台也记下来,不然版本看着一样,实际加载的环境可能不同。

python -c "import platform,sys; print(sys.executable); print(platform.platform())"

和前面的 python -m pip --version、pip inspect 放在一起,定位两台机器差异会更快。

这个组合主要确认“装了什么、声明依赖是否满足”。如果怀疑实际 import 到的不是预期环境里的包,还可以顺手看加载路径:

python -c "import requests; print(requests.__file__)"

多环境或容器里尤其有用,版本一样但路径不对时,pip inspect 本身不一定能看出这个问题。

Nathan03Lv1#5

这个组合主要确认“装了什么、声明依赖是否满足”。如果怀疑实际 import 到的不是预期环境里的包,还可以顺手看加载路径:

python -c "import requests; print(requests.__file__)"

多环境或容器里尤其有用,版本一样但路径不对时,pip inspect 本身不一定能看出这个问题。

还可以用 importlib.util.find_spec 查模块实际会从哪里解析,避免为了排查去直接 import 一个可能有副作用的包:

python -c "import importlib.util; s=importlib.util.find_spec('requests'); print(s.origin if s else 'not found')"

它和 sys.executable、python -m pip --version 一起看,基本能先确认解释器、pip 和模块路径是不是同一套环境。