DJ王大海

Back

Windows 上的第三方包管理器 —— ScoopBlur image

如果曾使用过 Linux 、macOS,或是使用过 Python 中的 pip 等工具,再回头来使用 Windows 系统时,最想要的可能就是一个好用的包管理器。毕竟相较于在浏览器里面搜索官网再下载,直接在命令行里面通过一行指令去安装软件还是非常舒适的,而且在后续的维护上,包管理器要明显方便得多。

举个例子:

如果你打算在自己的 Windows 电脑上安装 MinGW 环境,首先就要先打开浏览器搜索 MinGW-w64,点开 MinGW 官网下载最新的安装包(如果恰好你使用的搜索引擎是百某度之类的,那这一步大概就会困难重重),而且他们的官网发布的 Release 已经停留在 v8.1.0 很久了,要是想下载到更新的版本,还要去找 Github 里面自动打包的二进制版本发布仓库。下载好后,再去双击安装,自行配置环境变量。

但如果你使用了包管理器,那么你只需要:

scoop install mingw
powershell

如果安装的是一些有自我更新功能的软件倒还好,比如微信、QQ、浏览器什么的。但是要是 MinGW 这样的软件,要是哪天想要升级一下,就只能把上述流程重复一遍。

但如果你使用了包管理器,那么你只需要:

scoop update mingw
powershell

为什么是 Scoop#

现在的 Windows 11 在安装时会自带一个 WinGet,除此之外常见的包管理器还有 Chocolatey 和 Scoop等。Chocolatey 目前大部分功能都可以直接通过 WinGet 来替代,这里就不再多说。WinGet 使用起来也没什么 Bug,但就是有一些小问题让人难以忍受,包括但不限于:

  • 安装部分软件会直接从 Github 里面下载,在境内大部分时候都不能成功下载
  • 没有办法像手动安装那样灵活的调整一些选项,自启动、快捷方式、安装位置之类的都没法自选
  • 主要用于安装 .msi、.exe 与 .appx,目前不支持 .zip,有的软件在下载安装包后还需要手动点击安装。与其说是一个包管理器,更像是把GUI installer 变成 CLI installer 的小工具

对于上面的问题,Scoop 就能很好地解决。

首先 Scoop 自身有 proxy 的设置,不用担心软件下载失败,在下面会详细介绍。而且,Scoop 比较重视 portable,它会把所有的软件以一种类似于“绿色软件”的方式安装在 scoop 文件夹之下。但也正因为这样的设计, Scoop 存在着一些问题:

总得来说,是因为 Scoop 更新软件时,会在 scoop/app 文件夹下的软件目录里同时保存着新老版本的软件。这里以 git 为例:

git
├── 2.47.0.2
├── 2.47.0.1
└── current
powershell

其中的 current 是一个硬链接,始终指向最新版本的 git。正因如此,如果将老版本的应用固定在任务栏,在升级软件后点击任务栏上的快捷方式,就会出现在旁边另开了一个图标的情况。也会使得 7zip 这样的软件在升级后与已经关联的 .rar、.zip 等文件失去关联(这种一般会在安装后给出提示导入注册表,复制指令执行后就不会出现这样的问题)。

总的来说,没有自动更新功能的命令行软件更适合通过 Scoop 安装,而有自动更新功能的GUI 软件则更适合通过 WinGet 或是自行下载安装程序的方式安装。

安装 Scoop#

此部分参考 Scoop 官方文档 Scoop Wiki,本文可能无法及时更新。

准备工作#

需要高于 5.1 版本的 PowerShell,Windows 10 以及更高的版本应自带。

PowerShell 版本检查:

$PSVersionTable.PSVersion # has to be >= 5.1
powershell

允许 PowerShell 执行本地脚本:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
powershell

Unrestricted 也可以,但不太安全。

安装 Scoop#

在 PowerShell 中运行:

irm get.scoop.sh | iex
powershell

在这里如果想要将 scoop 安装在指定位置,可以运行:

# 下载安装器
irm get.scoop.sh -outfile 'install.ps1'

# 查看所有可配置选项
.\install.ps1 -?

# 安装命令示例,根据自己需要调整
.\install.ps1 -ScoopDir 'D:\Applications\Scoop' -ScoopGlobalDir 'F:\GlobalScoopApps'
powershell

在内网的情况下很难通过上面的命令成功安装,可以参照 Gitee 上面的国内镜像安装,具体请查看项目 README。安装命令如下:

# 安装命令
iwr -useb scoop.201704.xyz | iex

# 自定义安装目录
irm scoop.201704.xyz -outfile 'install.ps1'
.\install.ps1 -ScoopDir 'D:\Scoop' -ScoopGlobalDir 'D:\GlobalScoopApps'
powershell

使用 Scoop#

通过 scoop help 命令可以查看所有的命令。

安装卸载软件#

# 安装之前,通过 search 命令搜索, 确定软件全名
scoop search foo

# 安装
scoop install fooName

# 安装特定版本的软件,以 git 为例
scoop install git@2.47.0.windows.1

# 卸载
scoop uninstall fooName
powershell

更新软件#

# 更新 Scoop 自身
scoop update

# 更新部分软件
scoop update fooName1 fooName2

# 更新所有软件
scoop update *

# 禁止某程序更新
scoop hold fooName

# 允许某程序更新
scoop unhold fooName
powershell

清除缓存与旧版本#

# 查看所有已下载的缓存信息
scoop cache show

# 清除指定程序的下载缓存
scoop cache rm fooName

# 清除所有缓存
scoop cache rm *

# 删除某软件的旧版本
scoop cleanup fooName

# 删除全局安装的某软件的旧版本
scoop cleanup fooName -g

# 删除所有旧版本软件
scoop cleanup *
powershell

Bucket 相关命令#

Bucket 相当于 Scoop 的仓库,在安装 Scoop 后会默认激活 main 仓库。常见的 Bucket有:

  • extras:Scoop 官方维护的一个仓库,涵盖了大部分因为种种原因不能被收录进主仓库的常用软件
  • dorado:包含很多常用的 GUI 软件,比如 QQ、微信等
  • nerd-fonts:包含大部分 NerdFont

想要查看 Scoop 大部分仓库,使用以下命令:

scoop bucket list
powershell

添加 Bucket 命令(以 extras 为例):

scoop bucket add extras
powershell

建议安装程序#

Scoop 在初次安装软件后,会自动安装 7-zip,因为在它安装软件的过程中会使用到 7-zip 来进行解压缩操作,但除此之外还可以安装以下软件来增强 Scoop 的功能:

# 提权工具,临时使用管理员权限安装软件,可以在全局安装时使用
scoop install gsudo 

# 多线程下载工具,可以使 Scoop 下载更快
scoop install aria2
powershell

gsudo 在安装全局软件时可以直接在命令前加上 gsudo 提权,类似 Linux 中的 sudo,避免需要单独开以管理员模式运行的终端才能安装的麻烦。

aria2 在安装后,Scoop 的下载过程就会默认调用它,无需单独设置。

Windows 上的第三方包管理器 —— Scoop
https://astro-pure.js.org/blog/2024/scoop-win
Author 小岛秀儿
Published at 2024年10月22日
Comment seems to stuck. Try to refresh?✨