跳到主要内容

包管理器用法速查

吾心自有光明月,千古团圆永无缺。

导航


0、前言

不同的操作系统、编程语言几乎都有自己的包管理器,而每种包管理器的命令用法虽都大同小异,但还是有些区别的。为了避免在面临各种命令时出现一个头两个大的情况,特为此专门整理一份简要手册,以便随用随查。

1、Linux 类

Linux 系统下的包管理器很多,但综合来看其实主要分三种:

  • DEB 包:主要在 Debain、Ubuntu、以及它们的衍生系统中使用。
  • RPM 包:主要在 CentOS、RedHat、以及它们的衍生系统中使用。
  • 通用包:在任何 Linux 系统中均适用,并没有具体的专配系统。

注:(1)DEB 包和 RPM 包其实都是通过将编译后的二进制程序及其它附属文件以一种特定的流程打包之后的产物,二者仅仅只是在流程处理、软件管理方式上的不同,拆开来看二者并没有什么区别;(2)通用包就是指编译后的二进制程序无需经过像 DEB/RPM 那样的打包操作,直接就拿来使用的包。

1.1、DEB 包

1.1.1、apt

特点:在线安装,基于 .deb 包,可自动解决包之间的依赖关系。

#以下命令按照:初始化、增删查改、其它 进行的排序。

apt update # 更新软件仓库索引(同步最新软件列表)

apt install nginx # 安装软件包 nginx
apt install nginx=1.24.0 # 安装指定版本的软件包

apt remove nginx # 删除软件(保留配置文件)
apt purge nginx # 彻底删除软件(包括配置文件)
apt autoremove # 删除不再需要的依赖包(建议在卸载软件之后紧接着就执行)

apt search nginx # 搜索软件包
apt show nginx # 查看软件包详细信息
apt list -i # 查看当前已安装的软件包列表
apt list -u # 查看当前可升级的软件包列表

apt -f install # 修复损坏依赖或补全缺失依赖
apt install --only-upgrade 7zip# 升级指定已安装软件
apt upgrade # 升级所有已安装软件
apt full-upgrade # 完整升级(允许处理依赖变化、替换包)

注:apt upgradeapt full-upgrade 的区别在于对待“依赖关系变更”的处理方式apt upgrade 会安装当前已安装软件的最新版本。但是,如果升级某个软件需要安装新的依赖包,或者需要删除现有的依赖包,apt upgrade 会拒绝升级该软件,以保持系统的稳定性;而 apt full-upgrade 则不管这些,为了完成升级,可能会安装新包或删除旧包,行为上比较激进一些,不如前者保守。

1.1.2、dpkg

特点:离线安装,基于 .deb 包,需手动解决包之间的依赖关系。

#以下命令按照:初始化、增删查改、其它 进行的排序。

dpkg -ivh nginx.deb # 安装本地 deb 软件包

dpkg -r nginx # 删除软件(保留配置文件)
dpkg -P nginx # 彻底删除软件(包括配置文件)

dpkg -l # 查看系统中所有已安装软件包
dpkg -l | grep nginx # 查询 nginx 是否已安装
dpkg -s nginx # 查看指定软件包状态信息
dpkg -L nginx # 查看软件包安装了哪些文件
dpkg -S /usr/sbin/nginx # 查询某个文件属于哪个软件包
dpkg -c nginx.deb # 查看 deb 包内文件内容(不安装)

1.2、RPM 包

1.2.1、yum

特点:在线安装,基于 .rpm 包,可自动解决包之间的依赖关系。

#以下命令按照:初始化、增删查改、其它 进行的排序。

yum makecache # 更新本地仓库缓存

yum install nginx # 安装软件包 nginx
yum groups install "GroupTool" # 安装软件组中的所有软件。

yum remove nginx # 删除软件包 nginx
yum groups remove "GroupTool" # 删除软件组

yum search nginx # 搜索软件包
yum info nginx # 查看软件包详细信息
yum list installed # 查看已安装软件包
yum list available # 查看仓库中可安装软件
yum groups list # 查看可用的/已安装的软件组
yum groups info "GroupTool" # 查看软件组中包含哪些软件

yum update # 升级所有软件包
yum reinstall nginx # 重新安装软件包

yum clean all # 清理缓存
yum install pkg --downloadonly # 下载软件的离线包,但不安装

1.2.2、dnf

特点:YUM 的下一代替代品,它完全兼容并增强了 yum 的功能。这意味着,上面 yum 相关的命令用法在 dnf 中同样适用。

#以下命令按照:初始化、增删查改、其它 进行的排序。

dnf makecache # 更新仓库缓存

dnf install nginx # 安装软件包

dnf remove nginx # 删除软件包

dnf search nginx # 搜索软件包
dnf info nginx # 查看软件详细信息
dnf list installed # 查看已安装软件

dnf upgrade # 升级所有软件包
dnf reinstall nginx # 重新安装软件

dnf clean all # 清理缓存
dnf autoremove # 删除无用依赖

1.2.3、rpm

特点:离线安装,基于 .rpm 包,需手动解决包之间的依赖关系。

#以下命令按照:初始化、增删查改、其它 进行的排序。

rpm -ivh nginx.rpm # 安装本地 rpm 包

rpm -e nginx # 删除软件包

rpm -qa # 查看所有已安装软件包
rpm -qa | grep nginx # 查询 nginx 是否安装
rpm -qi nginx # 查看软件包详细信息
rpm -ql nginx # 查看软件包安装了哪些文件
rpm -qf /usr/sbin/nginx # 查询某文件属于哪个软件包
rpm -qc nginx # 查看软件包配置文件
rpm -qd nginx # 查看软件包文档文件
rpm -K nginx.rpm # 校验 rpm 包完整性

rpm -Uvh nginx.rpm # 升级安装 rpm 包
rpm -ivh --force nginx.rpm # 强制安装 rpm 包(慎用)

1.3、通用包

1.3.1、brew

特点:用户级安装,不污染系统目录,基于 Git 管理软件,软件版本非常新,且软件源非常丰富。【注:同 scoop 特别像】

#以下命令按照:初始化、增删查改、其它 进行的排序。

brew update # 更新 brew 自身及软件仓库索引

brew install wget # 安装软件包 wget

brew uninstall wget # 删除软件包 wget

brew search nginx # 搜索软件包
brew info nginx # 查看软件包详细信息
brew list # 查看已安装软件列表
brew list wget # 查看指定软件安装文件

brew upgrade # 升级所有已安装软件
brew reinstall wget # 重新安装软件

brew config # 查看运行时参数配置信息
brew cleanup # 清理旧版本缓存
brew doctor # 检查 brew 环境是否正常

注:(1)在 HomeBrew 官方仓库下有这四个仓库需要注意下:brew 是工具本体,install 是自动安装工具的脚本,homebrew-core 是命令行软件仓库,homebrew-cask 是图形化软件仓库。(2)在使用 install 脚本自动安装 brew 的时候,脚本会依次将另外三个仓库中的数据拉取到本地,由于软件仓库数据量庞大的原因,拉取的时候会出现 GitHub 排队现象,这其实是属于正常现象,不要慌,等待即可。(3)若想加速安装 brew,可在安装前先使用 chsrc set homebrew 修改镜像加速源,然后重启当前终端,然后执行 bash install.sh 即可加速安装 brew。

1.3.2、snap

特点:沙盒式的包管理器,独立运行环境,一次打包,可多系统使用,但启动慢,软件包庞大。【注:应用商店大多是图形化程序,命令行程序并不丰富。】

#以下命令按照:初始化、增删查改、其它 进行的排序。

snap install code # 安装软件包(例如 VS Code)

snap remove code # 删除软件包

snap find nginx # 搜索软件包
snap list # 查看已安装 snap 软件
snap info code # 查看软件详细信息
snap changes # 查看最近安装/升级任务记录

snap refresh # 升级所有 snap 软件
snap refresh code # 升级指定软件
snap revert code # 回滚到上一个版本

snap download hello-world # 下载软件离线包
snap ack hello-world*.assert;snap install hello-world*.snap # 注册软件包的签名信息,并安装离线包
snap install --dangerous hello-world*.snap # 不注册签名,直接安装离线包

snap services # 查看 snap 管理的服务
snap disable code # 禁用软件
snap enable code # 启用软件
snap start code # 启动服务
snap stop code # 停止服务
snap logs code # 查看软件日志

注:(1)snap 不像 apt 那样只是一个单一的命令,它是一个服务,在使用 snap 命令前,请确保 systemctl status snapd.service 已启动。(2)仓库地址:snapd

2、Windows 类

Windows 系统下管理软件一般不使用命令行管理,但命令行的批量、自动化特性又确实有其优势所在,故下面对 Windows 中常见的几个命令行包管理器的用法进行了整理总结。

2.1、scoop

特点:用户目录安装、绿色化管理、干净便携。

#以下命令按照:初始化、增删查改、其它 进行的排序。

scoop bucket add extras # 添加扩展仓库

scoop install git # 安装软件包 git

scoop uninstall git # 删除软件包 git

scoop search python # 搜索软件包
scoop list # 查看已安装软件
scoop info git # 查看软件详细信息
scoop bucket list # 查看当前仓库源

scoop update * # 升级所有已安装软件
scoop update # 更新 scoop 自身

scoop cleanup git # 清理在安装软件时下载的软件包缓存

注:scoop 无需更新本地索引缓存,因为它在被 install 或 search 的时候,首先就会自动更新自己的本地索引缓存。

2.2、winget

特点:微软官方方案出品,官方源稳定,桌面软件覆盖广。

#以下命令按照:初始化、增删查改、其它 进行的排序。

winget source update # 更新软件源
winget source list # 查看软件源

winget install Git.Git # 安装软件

winget uninstall Git.Git # 删除软件

winget search vscode # 搜索软件
winget upgrade # 查看可升级软件
winget list # 查看已安装软件
winget show Git.Git # 查看软件详细信息

winget upgrade --all # 升级全部软件

注:winget 配合该网站的软件组功能,在批量安装软件时效果非常好。

2.3、choco

特点:自动化部署常用,脚本化能力强。

#以下命令按照:初始化、增删查改、其它 进行的排序。

choco install git -y # 安装软件

choco uninstall git -y # 删除软件

choco search nodejs # 搜索软件
choco list --local-only # 查看已安装软件
choco info git # 查看软件详细信息
choco source list # 查看软件源

choco upgrade all -y # 升级全部软件
choco upgrade git -y # 升级指定软件

choco clean --yes # 清理缓存

3、Python 类

Python 生态里最常见的 4 个包管理工具:pip、pipx、uv、Conda。

3.1、pip

特点:官方默认的 python 包管理工具。

#以下命令按照:初始化、增删查改、其它 进行的排序。

pip install pkg_name # 安装 Python 包
pip install pkg_name.whl # 安装离线包,同时将依赖包也一并安装

pip uninstall pkg_name # 卸载 Python 包

pip list # 查看已安装包
pip show pkg_name # 查看包详细信息
pip search pkg_name # 搜索包(大部分环境已不支持了)

pip install --upgrade requests # 升级指定包

pip freeze > requirements.txt # 将当前环境下所有已安装的包的列表转换成一个 requirements.txt 依赖文件
pip install -r requirements.txt # 按依赖文件批量安装包
pip cache purge # 清理缓存
pip download pkg_name # 下载离线包,同时将依赖包也一并下载

3.2、pipx

特点:独立安装型工具管理器。专门用来安装那些通过 python 开发的工具,一个工具对应一个专属的 python 环境,完美的解决了不同工具之间依赖冲突的问题。

#以下命令按照:初始化、增删查改、其它 进行的排序。

pipx install black # 安装独立命令行工具

pipx uninstall black # 删除工具

pipx list # 查看 pipx 安装的软件
pipx environment # 查看 pipx 的环境变量

pipx upgrade black # 升级指定工具
pipx upgrade-all # 升级全部工具

pipx pin httpie # 锁住包当前的版本,防止其被意外更新。
pipx unpin httpie # 取消包的锁状态
pipx run httpie # 临时运行工具(不安装)

3.3、conda

特点:集 虚拟环境管理 + 依赖包管理 于一体的 python 包管理器。

#以下命令按照:初始化、增删查改、其它 进行的排序。

conda create -n myenv python=3.12 # 创建新环境
conda activate myenv # 激活环境
conda deactivate # 退出当前环境

conda install numpy # 安装包

conda remove numpy # 删除包

conda list # 查看环境中已安装包

conda update conda # 更新 conda 自身
conda env list # 查看所有环境
conda remove -n myenv --all # 删除整个环境

3.4、uv

特点:项目级依赖管理工具。集 创建虚拟环境、安装依赖、运行项目 于一体的 python 项目管理工具。【注:项目依赖锁文件名称 uv.lock】

#以下命令按照:初始化、增删查改、其它 进行的排序。

uv add pkg_name # 安装依赖(项目模式)
uv pip install pkg_name # 兼容 pip 安装方式

uv remove pkg_name # 删除依赖

uv pip list # 查看已安装包
uv tree # 树形查看已安装包之间的依赖关系

uv sync # 同步依赖环境

uv run python main.py # 在项目环境中运行程序
uv init # 初始化新项目

4、Node.js 类

Node.js 生态里最常见的 4 个工具:npm、npx、pnpm、Yarn

4.1、npm

特点:官方默认的 Node.js 包管理工具。【注:项目依赖锁文件名称 package-lock.json】

#以下命令按照:初始化、增删查改、其它 进行的排序。

npm init # 初始化 package.json
npm install # 按 package.json 安装全部依赖
npm install lodash --save-dev # 安装开发依赖
npm install express # 安装依赖到当前项目
npm install -g typescript # 全局安装软件包

npm uninstall express # 删除依赖

npm list # 查看当前项目依赖
npm list -g --depth=0 # 查看全局安装包
npm info express # 查看包详细信息
npm search express # 搜索包

npm update # 更新依赖

npm audit # 检查安全漏洞
npm cache clean --force # 清理缓存

4.2、pnpm

特点:npm 的优化版,在安装速度、磁盘优化(硬链接共享缓存模块)、依赖严格性方面做了提升。【注:项目依赖锁文件名称 pnpm-lock.yaml】


#以下命令按照:初始化、增删查改、其它 进行的排序。

pnpm add express # 安装依赖
pnpm add -D typescript # 安装开发依赖
pnpm install # 安装全部依赖

pnpm remove express # 删除依赖

pnpm list # 查看依赖

pnpm update # 升级依赖

pnpm store prune # 清理全局缓存
pnpm init # 初始化项目

4.3、npx

特点:类似 pipx 那样,临时执行一个项目工具,适合一次性工具。在项目目录中会下载所有相关的依赖项,自动优先使用项目依赖,不会全局安装项目依赖,避免了全局依赖受到污染。

其实使用 npm 也可以运行项目工具,只不过需要先找到项目目录,然后在其目录下运行项目工具才行。而这一番操作下来,体验上完全不如使用 npx 方便。

npx create-react-app myapp          # 临时执行脚手架工具
npx vite # 临时运行 vite
npx eslint src # 临时执行代码检查
npx cowsay hello # 临时运行工具(不全局安装)

4.4、yarn

特点:早期 npm 自身的项目管理能力较弱,故主要使用 yarn 作为项目管理工具,但目前 npm 已趋于完善,无需 yarn 自己也可以完成项目管理。【注:项目依赖锁文件名称 yarn.lock】

#以下命令按照:初始化、增删查改、其它 进行的排序。

yarn add express # 安装依赖
yarn add -D typescript # 安装开发依赖
yarn install # 安装全部依赖

yarn remove express # 删除依赖

yarn list # 查看依赖

yarn upgrade # 升级依赖

yarn init # 初始化项目
yarn cache clean # 清理缓存

5、杂七杂八