Scoop 是一个针对 Windows 操作系统的命令行包管理器,它专注于提供一种简洁、无管理员权限、用户级别的方式来安装、更新和管理应用程序。Scoop 的设计哲学是“零副作用 (zero-side-effects)”,即不污染系统 PATH、不依赖 UAC 提示、不创建不必要的注册表项,旨在为开发者提供一个干净、可移植的环境。

核心思想:将软件安装到用户目录下的一个沙盒环境,并通过动态修改用户 PATH 来实现软件的可用性,避免全局污染和管理员权限依赖。


一、为什么选择 Scoop?

传统的 Windows 软件安装方式常常伴随着以下问题:

  1. 管理员权限依赖:许多安装程序需要管理员权限才能运行,这在高安全环境或没有管理员权限的用户电脑上是问题。
  2. 系统污染:软件通常安装到 Program Files 目录下,并在注册表、系统 PATH 中留下大量痕迹。卸载不彻底可能导致残留。
  3. 环境变量管理:安装某些开发工具(如 Git, Node.js, Python, Go)时,需要手动或安装程序自动配置环境变量,这可能导致冲突或版本问题。
  4. 更新与卸载繁琐:更新软件需要重新下载安装包,卸载可能不完全。
  5. 版本管理复杂:在同一系统上管理多个版本的同一软件(例如 Node.js 的不同版本)通常很困难。

Scoop 旨在解决这些痛点,提供以下优势:

  • 无需管理员权限:所有软件都安装在用户的 AppData 或自定义目录中,无需 UAC 提示。
  • 无系统污染:不修改系统注册表,不向系统 PATH 添加条目。所有环境变量修改都是临时的或通过 Scoop 自身的 shims 机制管理。
  • 易于安装、更新和卸载:通过简单的命令行命令即可完成软件的生命周期管理。
  • 隔离与可移植:每个软件都有自己的安装目录,彼此隔离。整个 Scoop 环境可以在用户之间或设备之间轻松复制。
  • 开发者友好:特别适合安装和管理各种命令行工具、开发语言运行时和文本编辑器等。
  • 版本管理:支持安装和切换同一软件的不同版本。

二、Scoop 的核心概念

2.1 Scoop 本体

Scoop 是一个基于 PowerShell 脚本的应用程序,它提供了一系列命令来管理软件。其自身安装在用户目录下的一个特定位置(通常是 C:\Users\<YourUser>\scoop)。

2.2 Buckets (桶)

Bucket 是 Scoop 的软件仓库。它是一个 Git 仓库,其中包含了大量软件的清单文件 (Manifests)。当用户安装软件时,Scoop 会从配置的 Bucket 中查找对应的清单。

  • main Bucket:Scoop 默认包含的官方 Bucket,包含了大部分常用且稳定的开源工具。
  • extras Bucket:包含了更多不那么常用但仍然很受欢迎的软件。通常需要手动添加。
  • versions Bucket:用于提供同一软件的不同历史版本。
  • nirsoft Bucket:包含了 NirSoft 公司开发的一些小型免费工具。
  • nonportable Bucket:用于安装那些本身设计为需要安装器才能运行,无法完全实现“绿色”的软件,但 Scoop 仍然尝试提供更好的管理方式。
  • 自定义 Bucket:用户可以添加任何符合 Scoop 规范的 Git 仓库作为自己的 Bucket。

2.3 Manifests (清单文件)

Manifest 是位于 Bucket 中的 JSON 文件,它描述了一个软件的详细信息,包括:

  • 软件名称、版本
  • 下载链接 (URL)
  • 文件的哈希值 (Hash) 用于校验完整性
  • 安装指令(如何解压、移动文件、创建快捷方式等)
  • 可执行文件的路径 (bin)
  • 环境变量设置 (env)
  • 依赖项 (dependencies)
  • 需要持久化的目录 (persist)

示例 (简化的 Manifest 结构):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// go.json 示例
{
"version": "1.21.3",
"description": "The Go Programming Language.",
"homepage": "https://go.dev",
"license": "BSD-3-Clause",
"architecture": {
"64bit": {
"url": "https://dl.google.com/go/go1.21.3.windows-amd64.zip",
"hash": "c0e633d011f00889988295b9275037d40232b6e1742416b2494917631398867a"
},
"32bit": {
"url": "https://dl.google.com/go/go1.21.3.windows-386.zip",
"hash": "673f47e244b79c3d49b2512f438a0f917242ee59e20a7d57f84df945c7117a52"
}
},
"extract_dir": "go",
"bin": [
"bin\\go.exe",
"bin\\gofmt.exe"
],
"env_set": {
"GOROOT": "$dir"
},
"checkver": {
"url": "https://go.dev/dl/?mode=json",
"jsonpath": "$[?(@.stable == true && @.files[?(@.arch == 'amd64')].filename =~ 'windows-amd64')].version"
},
"autoupdate": {
"architecture": {
"64bit": {
"url": "https://dl.google.com/go/go$version.windows-amd64.zip"
},
"32bit": {
"url": "https://dl.google.com/go/go$version.windows-386.zip"
}
},
"hash": {
"url": "$url.sha256"
}
}
}

2.4 Shims (垫片)

Scoop 的核心机制之一。当安装一个软件时,Scoop 会在用户 PATH 中添加一个指向 scoop\shims 目录的条目。在 shims 目录中,Scoop 会为每个可执行文件创建一个小型的 .exe 文件(实际上是一个代理/软链接)。

当你在命令行中运行一个 Scoop 安装的程序(例如 go),系统会先在 shims 目录找到 go.exe 这个垫片,然后垫片会将请求重定向到实际安装在 scoop\apps\go\<version>\bin\go.exe 路径下的程序。

  • 优势:避免直接将大量软件的 bin 目录添加到系统 PATH,保持 PATH 的整洁,且用户可以轻松切换软件版本而无需手动修改 PATH。

三、Scoop 的安装与基本使用

3.1 安装 Scoop

前提条件:

  • Windows 7 SP1+ (Windows 10/11 最佳体验)
  • PowerShell 5.1+ (Windows 10 默认自带)
  • .NET Framework 4.5+ (Windows 10 默认自带)

安装步骤:

  1. 设置 PowerShell 执行策略: 默认情况下,PowerShell 的执行策略可能不允许运行本地脚本。需要修改为 RemoteSignedBypass

    1
    2
    3
    Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
    # 如果遇到问题,可以尝试更宽松的 Bypass
    # Set-ExecutionPolicy Bypass -Scope CurrentUser

    输入 Y 确认。

  2. 安装 Scoop: 在 PowerShell 中执行以下命令。

    1
    irm get.scoop.sh | iex

    这将下载并执行 Scoop 的安装脚本。默认情况下,Scoop 将安装到 C:\Users\<YourUser>\scoop
    如果想安装到自定义目录,例如 D:\Scoop,可以这样执行:

    1
    2
    3
    $env:SCOOP='D:\Scoop'
    [System.Environment]::SetEnvironmentVariable('SCOOP', $env:SCOOP, 'User')
    irm get.scoop.sh | iex
  3. 验证安装:

    1
    scoop help

    如果显示帮助信息,则说明 Scoop 安装成功。

3.2 常用命令

以下是 Scoop 的一些常用命令及其说明和示例:

  • scoop help [command]

    • 显示 Scoop 的帮助信息,或特定命令的帮助信息。
    1
    2
    scoop help
    scoop help install
  • scoop install <app_name>

    • 安装指定的应用程序。
    1
    2
    3
    4
    scoop install git         # 安装 Git
    scoop install nodejs-lts # 安装 Node.js LTS 版本
    scoop install go # 安装 Go 语言环境
    scoop install vscodium # 安装 VSCodium (VS Code 的开源版本)
  • scoop uninstall <app_name>

    • 卸载指定的应用程序。
    1
    scoop uninstall git
  • scoop update

    • 更新 Scoop 自身以及所有已安装的应用程序。
    1
    2
    scoop update             # 更新所有应用
    scoop update git # 仅更新 Git
  • scoop search <query>

    • 搜索可用的应用程序。
    1
    scoop search python      # 搜索所有包含 'python' 的应用
  • scoop list

    • 列出所有已安装的应用程序。
    1
    scoop list
  • scoop status

    • 显示 Scoop 的当前状态,包括更新信息、版本等。
    1
    scoop status
  • scoop home <app_name>

    • 在浏览器中打开指定应用程序的主页。
    1
    scoop home git
  • scoop bucket add <bucket_name>

    • 添加一个新的 Bucket。例如,添加 extrasversions 桶以获取更多软件。
    1
    2
    scoop bucket add extras
    scoop bucket add versions
  • scoop bucket list

    • 列出所有已添加的 Bucket。
    1
    scoop bucket list
  • scoop cache / scoop cache rm

    • 管理 Scoop 下载的安装包缓存。scoop cache 查看缓存,scoop cache rm * 清理所有缓存。
    1
    2
    scoop cache        # 查看缓存
    scoop cache rm * # 清理所有缓存
  • scoop config

    • 配置 Scoop 的各种设置,例如代理、安装路径等。
    1
    2
    scoop config proxy http://your.proxy.com:port # 设置代理
    scoop config rootdir C:\Apps\Scoop # 更改 Scoop 安装根目录 (谨慎操作)

四、高级用法

4.1 管理 Buckets

除了 main 桶,extrasversions 桶通常是必不可少的。

  • 添加 extras 桶可以安装如 VSCodium, Discord, Docker-Desktop 等更多应用。
    1
    scoop bucket add extras
  • 添加 versions 桶可以安装指定版本的软件,例如 node@14
    1
    scoop bucket add versions
  • 你也可以添加第三方的 Bucket,例如一些社区维护的。
    1
    2
    scoop bucket add <bucket_name> <git_repo_url>
    # 例如:scoop bucket add dahlia https://github.com/dahlia/scoop-bucket

4.2 版本管理

通过 versions 桶,可以安装同一软件的不同版本,并进行切换。

  • 安装指定版本:
    1
    2
    scoop install nodejs-lts@16.20.0 # 安装 Node.js 16.20.0 LTS
    scoop install nodejs-lts@18.18.0 # 安装 Node.js 18.18.0 LTS
  • 切换活动版本 (通过 reset 命令):
    1
    scoop reset nodejs-lts@16.20.0 # 将 Node.js 的活动版本切换到 16.20.0
  • 查看所有已安装版本:
    1
    scoop list nodejs-lts

4.3 持久化数据 (persist)

Scoop 安装的软件默认是“沙盒化”的,当软件更新或重新安装时,其安装目录会被替换。如果某些软件需要存储用户数据、配置文件或插件,而这些数据不希望随着更新而丢失,就需要使用 persist 功能。

在软件的 Manifest 文件中,可以定义一个 persist 数组,指定需要保留的目录或文件。当 Scoop 安装或更新软件时,这些指定的数据会被移动到用户 AppData 目录下的一个持久化位置,并通过软链接链接回软件的安装目录。

  • 用途:确保配置文件、插件、数据库文件等用户生成或修改的数据在软件更新或版本切换时不会丢失。
  • 示例:对于 git 来说,它的 ~/.gitconfig 等配置文件就是通过 persist 来保留的。
  • 手动管理:对于没有定义 persist 的软件,或者你希望持久化特定数据,可以使用 scoop persist 命令手动添加或移除持久化路径。
    1
    2
    3
    # 为某个应用添加持久化目录 (以实际应用和路径为准)
    scoop persist add <app_name> <path_relative_to_app_root>
    # 例如:scoop persist add myapp 'data' # 将 myapp 安装目录下的 data 文件夹持久化

五、Scoop 的优缺点

5.1 优点:

  1. 无管理员权限:显著降低安全风险和使用门槛。
  2. 纯净无污染:不修改系统 PATH,不创建注册表项,卸载彻底。
  3. 绿色免安装:大多数软件都是解压即用,高度可移植。
  4. 自动化环境变量:通过 shims 机制自动处理 PATH,无需手动配置。
  5. 统一管理:通过统一的命令管理所有 Scoop 安装的软件。
  6. 版本管理:方便安装、切换和管理同一软件的不同版本。
  7. 开发者友好:尤其适合命令行工具、编程语言运行时、IDE 等开发工具的管理。
  8. Git 集成:Buckets 是 Git 仓库,方便社区协作和管理。

5.2 缺点:

  1. 仅限命令行:没有图形用户界面,对于不习惯命令行的用户有一定学习曲线。
  2. 软件覆盖范围:虽然 Buckets 丰富,但仍有一些大型或商业软件(如 Adobe 全家桶、Microsoft Office)不适合通过 Scoop 安装。
  3. .NET Framework 依赖:Scoop 本身依赖 .NET Framework,但在现代 Windows 系统中通常已预装。
  4. 网络依赖:安装和更新都需要从网络下载文件。
  5. 少数软件兼容性问题:部分软件可能因为其特殊安装机制而无法完全实现“绿色”,或需要额外的配置。
  6. 错误处理:有时安装或更新可能因为 Manifest 文件问题、网络问题或软件本身特性而失败,需要手动排查。

六、与 Windows 其他包管理器对比

在 Windows 生态中,除了 Scoop,还有其他流行的包管理器:

  1. Chocolatey

    • 特点:历史悠久,软件数量庞大,支持更多 GUI 软件和驱动程序。
    • 权限:通常需要管理员权限安装软件。
    • 安装位置:默认安装到 C:\ProgramData\chocolatey,并修改系统 PATH。
    • 适用场景:适合需要广泛软件支持、且不介意管理员权限的普通用户和企业环境。
  2. Winget (Windows Package Manager)

    • 特点:微软官方出品,集成在 Windows 10/11 中,支持商店应用和传统 Win32 应用。拥有 CLI 和可选的 GUI (App Installer)。
    • 权限:部分软件安装需要管理员权限
    • 安装位置:依据软件本身的安装逻辑,通常安装到 Program Files
    • 适用场景:微软生态内的标准解决方案,适合大多数 Windows 用户。

Scoop 的定位:
Scoop 填补了非管理员、纯命令行、高度沙盒化和开发者友好的小众市场。它不与 Chocolatey 和 Winget 构成直接竞争,而是提供了一种独特的、强调“零副作用”和“可移植性”的补充方案。对于频繁使用命令行工具、管理多种开发环境的开发者来说,Scoop 往往是首选。

七、总结

Scoop 是一个独特且强大的 Windows 命令行包管理器,尤其在无需管理员权限、系统无污染、易于管理开发环境方面表现出色。它通过 Bucket、Manifest 和 Shim 等核心机制,实现了软件的快速安装、更新和卸载,并有效解决了传统 Windows 软件安装的诸多痛点。

虽然其纯命令行的特性可能对部分用户造成一定的学习门槛,且软件覆盖范围并非无所不包,但对于追求高效、纯净、可控的开发者而言,Scoop 无疑是一个值得掌握的利器。通过理解其工作原理并熟练运用常用命令,你可以极大地提升在 Windows 环境下的软件管理效率。