> ## Content Index
> Fetch the complete content index at: https://djdog.cc/llms.txt
> Use this file to discover other available public pages before exploring further.

# Windows 上的第三方包管理器 —— Scoop
- URL: https://djdog.cc/blog/2024/scoop-win/
- Published: 2024-10-22T15:23:32.000Z
- Updated: 2024-10-24T04:00:00.000Z
- Description: 或许体验略胜于 WinGet
- Author: DJDOG
- Tags: Windows, 开发工具, #toc

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

举个例子：

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

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

```powershell
scoop install mingw

```

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

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

```powershell
scoop update mingw

```

## 为什么是 Scoop

现在的 Windows 11 在安装时会自带一个 [WinGet](https://github.com/microsoft/winget-cli?ref=djdog.cc)，除此之外常见的包管理器还有 Chocolatey 和 Scoop等。Chocolatey 目前大部分功能都可以直接通过 WinGet 来替代，这里就不再多说。WinGet 使用起来也没什么 Bug，但就是有一些小问题让人难以忍受，包括但不限于：

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

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

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

- [2024 年,使用 Scoop 的问题 - V2EX](https://jp.v2ex.com/t/1030930?ref=djdog.cc)
- [时至 2023 的今天， winget 还是 scoop？ - V2EX](https://www.v2ex.com/t/950041?ref=djdog.cc)

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

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

```

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

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

## 安装 Scoop

此部分参考 Scoop 官方文档 [Scoop Wiki](https://github.com/ScoopInstaller/Scoop/wiki/Quick-Start?ref=djdog.cc)，本文可能无法及时更新。

### 准备工作

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

PowerShell 版本检查：

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

```

允许 PowerShell 执行本地脚本：

```powershell
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

```

`Unrestricted` 也可以，但不太安全。

### 安装 Scoop

在 PowerShell 中运行：

```powershell
irm get.scoop.sh | iex

```

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

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

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

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

```

在内网的情况下很难通过上面的命令成功安装，可以参照 Gitee 上面的[国内镜像](https://gitee.com/scoop-installer/scoop?ref=djdog.cc)安装，具体请查看项目 README。安装命令如下：

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

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

```

## 使用 Scoop

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

### 安装卸载软件

```powershell
# 安装之前，通过 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 *

```

### Bucket 相关命令

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

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

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

```powershell
scoop bucket list

```

添加 Bucket 命令（以 extras 为例）：

```powershell
scoop bucket add extras

```

### 建议安装程序

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

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

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

```

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

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