You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何生成仅包含主动安装包的Python环境最小依赖列表

如何生成仅包含主动安装包的Python环境最小依赖列表

我太懂这种烦恼了——每次用pip freeze导出依赖,结果一堆子依赖混在里面,手动整理简直是个大坑!肯定不止你一个人被这个问题折腾,下面给你几个实用的解决办法,不管是事后生成干净的依赖列表,还是日常维护都能用:


方法一:用pipdeptree一键提取顶层包

pipdeptree是专门用来分析Python依赖树的工具,能精准找出你主动安装的顶层包(也就是没有被其他包作为依赖引入的包),完全过滤掉子依赖。

  1. 先安装这个工具:
./.venv/bin/python3 -m pip install pipdeptree
  1. 直接运行命令导出干净的依赖列表:
./.venv/bin/python3 -m pipdeptree --freeze --top-level > requirements.txt

执行完这个命令,requirements.txt里就只有你手动装的AAA、BBB、CCC这类包了,子依赖完全不会出现。


方法二:纯shell命令过滤(适合不想额外装工具的场景)

如果你不想新增工具依赖,可以结合pip freeze和shell命令来筛选。核心思路是先导出完整依赖树,再排除那些被其他包依赖的包:

# 先把完整的依赖树导出到临时文件
./.venv/bin/python3 -m pipdeptree --freeze > temp_deps.txt

# 提取所有包名和被依赖的包名
grep -E '^[a-zA-Z0-9_-]+==' temp_deps.txt | cut -d'=' -f1 | sort > all_pkgs.txt
grep -E '^  [a-zA-Z0-9_-]+==' temp_deps.txt | cut -d'=' -f1 | sed 's/^  //' | sort > dependent_pkgs.txt

# 找出不在依赖列表里的顶层包,写入requirements.txt
comm -23 all_pkgs.txt dependent_pkgs.txt > requirements.txt

# 清理临时文件
rm temp_deps.txt all_pkgs.txt dependent_pkgs.txt

不过这个方法还是得先装pipdeptree,如果是完全纯shell的话会更复杂,所以还是推荐方法一的直接命令更省心。


方法三:从源头维护,用pip-compile避免后续整理

如果你想从安装阶段就杜绝这个麻烦,可以用pip-tools套件里的pip-compile。它的逻辑是你只需要维护一个极简的requirements.in文件,里面只写你主动要装的包,然后由它生成包含所有子依赖的锁定文件:

  1. 安装pip-tools:
./.venv/bin/python3 -m pip install pip-tools
  1. 创建requirements.in文件,只写你的目标包:
AAA
BBB
CCC
  1. 运行pip-compile生成完整的依赖锁定文件:
./.venv/bin/python3 -m pip-compile requirements.in

这样以后要加新包,直接编辑requirements.in再运行pip-compile就行,你永远都有一个干净的、仅包含主动安装包的列表,完全不用事后整理。


临时应急小技巧:用grep快速筛选(适合包数量少的情况)

如果你的主动安装包不多,而且能记清名字,也可以直接用grep从pip freeze结果里挑出来:

./.venv/bin/python3 -m pip freeze | grep -E '(AAA|BBB|CCC)' > requirements.txt

不过这个方法不够自动化,适合临时救急,包多了就不太好用了。

希望这些方法能帮你摆脱依赖列表整理的麻烦!

备注:内容来源于stack exchange,提问作者Ray Kiddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 13:43:09