pacman 装包只有一条命令,删包有三条,区别是「连坐」的范围。
-Rsc 会把「依赖你的包」一起删掉,删之前先看 Required By。
1.2.3 把环境更新好了,这一篇讲怎么往里装东西。 下一篇 1.2.5 就用这些命令装编 FFmpeg 要的依赖。
一、常用命令按危险程度排
装包的只有一条,删包的有三条,搜与查的各一条。 命令 作用 危险
pacman -S 包名 装 低 pacman -Ss 关键词 搜仓库 低 pacman -Qi 包名 看已装包的信息 低 pacman -Ql 包名 看这个包装了哪些文件 低 pacman -R 包名 只删这个包 中 pacman -Rs 包名 连带删没人再用的依赖 高 pacman -Rsc 包名 连同依赖它的包一起删 最高
-S 是 sync,-Q 是 query,-R 是 remove。
三个大写字母加小写修饰,就是 pacman 的全部语法。
-Ss 里的第二个 s 是 search,-Qi 的 i 是 info,-Ql 的 l 是 list。 记住这四组,
日常够用。
二、三级连坐:-R、-Rs、-Rsc 到底差在哪
这是 pacman 唯一会咬人的地方,必须拆开看。 假设依赖图是这样:ffmpeg 需要 x264、x265、aom、zlib、libass; 而 mpv、vlc、obs-studio 需要 ffmpeg。 命令 删掉谁 个数
-R ffmpeg 只有 ffmpeg 1 -Rs ffmpeg ffmpeg 加它需要的 7 个依赖 8 -Rsc ffmpeg 再加 mpv、obs-studio、vlc 11
区别在方向:-s 往下删(我需要的),-c 往上删(需要我的)。
-Rsc 两个方向都删,所以它删得最干净,也最容易误伤。
上面这三个数字是本课按真实依赖关系算出来的,本机没有 pacman,所以不是它真删的输出。
能验的是算法,验不了的是那次删除。
三、删之前先看 Required By
pacman -Qi 包名 的输出里有一行 Required By,那就是「谁依赖我」。
这一行不空,-Rsc 就会连坐;这一行是 None,删了也不会牵连别人。
Required By 含义 该用哪条
None 没人依赖它 -Rs 就够 列着一串包名 有包依赖它 别用 -Rsc
养成这个习惯比记住一百条命令值钱。 敲 -Rsc 之前多看一眼,能省掉重装整个环境的两个小时。
四、装的时候加 --needed,省一半时间
pacman -S --needed 包名:已装的自动跳过,不会重复下载。
不加这个参数,pacman 会把已装的包重新下载、重新解包一遍,看起来没事,实际白等。
脚本里一律加 --needed。
另一个常用参数是 --noconfirm,跳过所有交互确认。
写自动化脚本时用它,手动操作时别用——那正是你唯一能看清「要删什么」的机会。
本机验不了这些命令,因为 pacman 不在这台机器上(Demo 2 查过)。
这条限制会一直持续到本课讲完,凡涉及 MSYS2 的部分都是清单而非实测。
五、动手 Demo:Pacman 常用命令——哪几条会删东西,删多少
本机没有 pacman,调用它只会得到 FileNotFoundError。 真正跑的是「按依赖图算连坐范围」这一段。
dep = {"ffmpeg": ["x264", "x265", "aom", "zlib", "libass"]} # 完整图见正文
def closure(root): # 我需要的
...
def rev(root): # 需要我的
...
print(len(closure("ffmpeg")), len(rev("ffmpeg")))
实跑输出:
--------------------------------------------------------------------
Pacman 常用命令——哪几条会删东西,删多少
--------------------------------------------------------------------
**① 常用命令,按危险程度排**
命令 作用 危险
-------------------------------------------------------
pacman -S 包名 装 低
pacman -Ss 关键词 搜 低
pacman -Qi 包名 看已装包的信息 低
pacman -Ql 包名 看这个包装了哪些文件 低
pacman -R 包名 只删这个包,依赖留着 中
pacman -Rs 包名 连带删没人再用的依赖 高
pacman -Rsc 包名 连同依赖它的包一起删 最高
**② 本机执行:两条都告诉你「没有这个命令」**
`pacman -Q` → FileNotFoundError:WinError 2,系统里没有这个可执行文件
`pacman -Ss ffmpeg` → FileNotFoundError:WinError 2,系统里没有这个可执行文件
**③ 真问题在 -Rsc:它会把「依赖你的包」也删掉**
下面这张依赖图是本课按 MSYS2 的真实依赖关系画的。
要算的是:删掉 `mingw-w64-x86_64-ffmpeg`,`-Rsc` 会连带带走谁。
命令 会删掉的包 个数
--------------------------------------------------------------------------------------
-R ffmpeg ffmpeg 1
-Rs ffmpeg ffmpeg + aom、freetype、fribidi、libass、x264、x265、zlib 8
-Rsc ffmpeg 再加上 mpv、obs-studio、vlc 11
**一个 `-Rs` 会带走 8 个包,一个 `-Rsc` 会带走 11 个**——后者连 mpv、vlc、obs-studio 一起删,
因为它们是「依赖 ffmpeg 的」。
**④ 所以删之前先问一句**
`pacman -Qi 包名` 里有一行 `Required By`,那一行就是「谁依赖我」。它不空,`-Rsc` 就会连坐。
**养成先看 Required By 再动手的习惯,比记住一百条命令值钱。**
**⑤ 本课的实测结论**:本机没有 pacman,所以上面三行数字是在这张图上算出来的,
不是 pacman 真删的输出。
图里的包名取自 MSYS2 真实仓库,依赖关系也一样——**能验的是算法,验不了的是那次删除**。
一个 -Rs 带走 8 个包,一个 -Rsc 带走 11 个。
差的三个是 mpv、obs-studio、vlc——它们是「依赖 ffmpeg 的」。
30 秒实验
pacman -Qi 某个包 | grep "Required By",看这一行是不是 None。- 拿本节的依赖图,手工算一遍
-Rs x264会删几个包,再和代码结果对一下。 pacman -Ql 包名 | head看一个包往磁盘上放了哪些文件。
常见误区
- 习惯性用
-Rsc删包。 它会把依赖这个包的软件一起删,删 ffmpeg 顺带删掉播放器和直播软件。 - 删之前不看 Required By。 这一行是唯一的警告,就在
-Qi的输出里。 - 以为
-R会把依赖一起删。 它只删指定的包,依赖留在磁盘上变成孤儿。
自测三问(点开对答案)
1. `-Rs` 与 `-Rsc` 的区别是什么? —— `-s` 往下删(这个包需要的依赖),`-c` 往上删(需要这个包的软件)。`-Rsc` 两个方向都删。 2. 怎么提前知道删某个包会不会牵连别人? —— `pacman -Qi 包名` 里的 Required By 一行。它列着包名就说明有人依赖它。 3. 脚本里为什么建议加 `--needed`? —— 已装过的包会被跳过,不重复下载解包,省时间且避免覆盖本地改动。- ☐ (本节完,下一节 1.2.5 在 MSYS2 安装依赖项)