如何生成仅通过pip安装的Python包列表?若问题重复提前致歉
区分pip与系统包管理器安装的Python包列表方法
核心思路
系统包管理器(apt/yum/pacman)安装的Python包通常存放在系统默认的site-packages路径,而pip安装的包(尤其是用户级安装)会放在用户目录或虚拟环境中。通过对比系统包列表和pip包列表,或检查包的安装路径,可以实现分类。
一、导出系统包管理器安装的Python包列表
根据你使用的发行版,执行对应命令:
Debian/Ubuntu(apt)
dpkg -l | grep -E 'python3-.+' | awk '{print $2}' | sed 's/python3-//' | tr '-' '_'
说明:过滤出系统安装的Python3包,将包名格式转换为pip通用的下划线形式(如
python3-requests转成requests)
RHEL/CentOS/Fedora(yum/dnf)
dnf list installed | grep -E 'python3-.+' | awk '{print $1}' | sed 's/python3-//' | tr '-' '_'
Arch Linux(pacman)
pacman -Q | grep -E 'python-.+' | awk '{print $1}' | sed 's/python-//' | tr '-' '_'
可将结果保存到文件方便后续对比:
# 以Debian/Ubuntu为例 dpkg -l | grep -E 'python3-.+' | awk '{print $2}' | sed 's/python3-//' | tr '-' '_' > sys_pkgs.txt
二、导出pip管理的包列表
获取所有pip安装的包名(不含版本号):
pip list --format=freeze | cut -d'=' -f1 > pip_pkgs.txt
如果只想看用户级pip安装的包(这类包肯定不是系统包管理器安装的),直接执行:
pip freeze --user
三、对比列表实现分类
1. 仅通过pip安装的包
grep -vxFf sys_pkgs.txt pip_pkgs.txt
说明:从pip包列表中剔除系统包管理器安装的包,剩余就是纯pip安装的包
2. 仅通过系统包管理器安装的包
grep -vxFf pip_pkgs.txt sys_pkgs.txt
说明:从系统包列表中剔除pip管理的包,剩余就是纯系统安装的包
补充:通过安装路径判断单个包
若想确认某个包的来源,执行:
pip show <包名>
查看输出中的Location字段:
- 若路径包含
/usr/lib/pythonX.X/site-packages(X.X为Python版本),大概率是系统包管理器安装的; - 若路径包含
~/.local/lib/pythonX.X/site-packages或虚拟环境路径,则是pip安装的。
内容的提问来源于stack exchange,提问作者yananet
相关产品推荐
相关产品推荐

