Scoop——也许是Windows平台最好用的软件(包)管理器

本文最后更新于:2022年6月9日 下午

当我们谈论起Windows平台软件安装的话题,总是避免不了想起被各种流氓软件和捆绑安装支配的日子。这背后的原因,一方面是软件厂商的流氓,各种强行捆绑而且默认勾选;另一方面是搜索引擎的流氓,搜索软件出来的第一个永远是xx软件园而非官方平台,一个不留神就是各种全家桶伺候。

解决这一软件生态问题的故事自然离不开苹果的应用商店,无论是IOS的App Store还是macOS的Mac App Store。把各种软件的分发和下载规范化,让用户使用上安全稳定的软件,一方面满足用户对于软件的管理需求,一方面也为应用商店增加营收入口。

所谓平台概念,就是如此。当然这一应用商店模式,也拓展到各大操作系统,比如移动端另一大阵营安卓的Google Play及国内本地化的各大应用商城,Windows的Microsoft Store (曾用名Windows Store),以及Linux许多发行版的应用商店等等。

软件管理的需求

回顾一下软件管理的需求,然后判断当前的软件管理模式是否满足需求(不感兴趣的读者请直接跳过)。

基本需求

  • 查看已安装软件的名称、信息、状态等。
  • 浏览与搜索想要的软件,这背后是足够丰富的软件生态链的支持,即我想要什么基本都可是找到。
  • 安装目标软件。
  • 了解已安装软件是否可更新,软件更新的主要功能说明,并可选择更新软件。
  • 卸载不需要的软件。

高级需求

  • 回滚版本或安装特定版本:某些软件更新后导致负体验的背景下产生该需求。
  • 锁定版本:为维持软件及其他相关环境的稳定性,更新为非必要需求,或者纯粹不想更新某软件,需要锁定软件版本,防止更新。
  • 用户数据的清理:强迫症患者需求,一般这个功能会交给各种清理软件,但是谁会比软件自己的开发者更了解产生并储存了哪些用户数据呢?更有一些软件因为卸载后的残留问题导致下次安装时的各种问题就属于软件本身的问题了,这里也不多探讨。
  • 软件备份与迁移:当有多设备,或者某次重装系统,需要重新安装各种常用软件是一件头疼的事,所以当前设备软件的导出备份与迁移安装至新设备是一大需求,特别是对于某些装系统人员或者运维人员。

需求满足度

基本需求方面,大多数需求是满足了的,只不过并没有那么的切合。

  • 绝大多数应用商店的目的是盈利,所以什么推送、广告、排名等一系列手段玩得相当成熟。至于真正为用户推送「好」软件,那大概需要某些第三方非盈利平台了。还有如果整个应用商店的设计中心是在推广软件的话,其他方面的功能需求就被稀释或者淡化,甚至造成负体验。
  • 对于已安装软件/应用的管理(查看已安装与卸载),大部分应用商店并不支持,而是把相关需求移交给了系统层级的应用管理,或者直接在桌面/开始菜单/Launchpad里的图标上进行右键管理或者长按操作管理。
  • 高级需求基本都没怎么实现,往往需要通过备份系统镜像的方式曲线救国。手机方面应用云同步相对做的好一些,只是用户数据备份方面还没到应用层(除开相册、日程、通讯录之类)。

Scoop的基本介绍

Scoop是一款适用于Windows平台的命令行软件(包)管理工具,这里是GitHub介绍页。简单来说,就是可以通过命令行工具(PowerShell、CMD等)实现软件(包)的安装管理等需求,通过简单的一行代码实现软件的下载、安装、卸载、更新等操作。其灵感来源于macOS的Homebrew,Mac用户可以去了解了解。

当然如果用过Linux系统,使用apt-get工具安装过软件,或者用过Python,知道pip工具用于管理Python各种依赖包,那么理解Scoop就比较容易,这些工具的设计理念与使用方法都非常类似。

Scoop一般用来管理绿色软件,即是一种通过解压压缩包即可就地使用的软件,对于比较专业软件(比如Office、Adobe等)支持不好(虽然有大神在自制这样的第三方仓库,不过好像一直没实现)。

一些软件知识补充

一般软件包含三种数据:

  1. 软件本体数据,维持软件正常运行。
  2. 软件与用户交互的数据,为了让用户更好的使用软件,比如缓存文件、自定义配置文件、日志文件等。
  3. 用户通过软件创造的直接面向用户的数据,比如各类文档。

用户在安装软件的时候,一般仅能自定义软件的安装目录(有一些甚至不能自定义),而无权管理软件与用户交互产生的数据的目录,至于第三类数据大家都很熟悉属于用户完全操纵。其中用户无法直接管理的第二类数据一般储存在「AppData」隐藏目录中,强迫症流泪。

Scoop的软件管理逻辑

而对于Scoop来说,其数据存储逻辑是先划好一块地盘——「Scoop」根目录,然后软件本体一个「apps」目录,用户数据一个「persist」目录。当然实际使用过程中,其实有挺多第三方仓库中的软件没有实现这一逻辑,依然把用户数据藏在「AppData」目录中,这就是需要优化的后话了。

由于一眼就爱上了这么一种软件管理逻辑,所以就一直使用Scoop至今,已有两三年了吧,期间换过不少Windows机子也一直使用着,觉着甚是方便。所以,如今来写篇教程也不过分吧。

Scoop基本使用教程

下面就是正式的教程时间,我会从前置条件、Scoop的安装、常用的命令工具、推荐软件仓库四个方向介绍主要的用法。

Scoop安装前置条件

根据官方的条件要求,你需要:

  1. Windows 7 SP1+或Windows Server 2008+(当然你用主流的Windows 10或Windows 11更没有什么问题)。
  2. PowerShell 5(及以上,包含PowerShell Core)和.NET Framework 4.5(及以上)(当然我相信读者朋友们肯定都满足了,实在未满足可通过文本链接前去下载)。

还有两个中国用户需要确认的额外的条件(当然我觉得你能看到这篇文章自然也都满足了):

  1. 由于众所周知的天朝网络原因,你需要能够正常访问GitHub并下载其资源。
  2. 由于环境变量中文路径的支持问题,你的Windows用户名或自定义的安装路径不得包含中文。

Scoop工具的安装

第一步,也是最重要的一步,就是先完成Scoop工具的安装。按照官方的教程,我们需要打开PowerShell(这个应该不用教了吧,当然我强烈建议使用新一代终端Windows Terminal,标签页、多种命令行工具多开、高颜值、更人性化的文本编辑等等太香了)。

Windows Terminal

设置PowerShell权限

为了让PowerShell可以执行脚本,首先需要设置PowerShell执行策略,通过输入以下命令Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser即可。(如果之前已开启,可忽略。)

安装Scoop

通过以下命令,可以将Scoop安装到默认目录(C:\Users\<username>\scoop):

1
Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh')

或者另一条更短的命令:

1
iwr -useb get.scoop.sh | iex

如果你需要更改默认的安装目录,则需要在执行以上命令前添加环境变量的定义,通过执行以下命令完成:

1
2
$env:SCOOP='D:\Applications\Scoop'
[Environment]::SetEnvironmentVariable('SCOOP', $env:SCOOP, 'User')

其中目录D:\Applications\Scoop可根据自己的情况修改。

完成之后,相应位置就会生成一个scoop文件夹,如图所示:

scoop文件夹示意

简单解释下子目录中其他文件夹的含义:

  • apps——所有通过scoop安装的软件都在里面。
  • buckets——管理软件的仓库,用于记录哪些软件可以安装、更新等信息,默认添加main仓库,主要包含无需GUI的软件,可手动添加其他仓库或自建仓库,具体在推荐软件仓库中介绍。
  • cache——软件下载后安装包暂存目录。
  • persit——用于储存一些用户数据,不会随软件更新而替换。
  • shims——用于软链接应用,使应用之间不会互相干扰,实际使用过程中无用户操作不必细究。

中国用户专享

如果你访问GitHub有问题,或下载其中的资源有问题,可尝试以下方法:

  1. 设置Scoop代理。在命令行中输入(PowerShell或者CMD中都行)scoop config proxy 127.0.0.1:7890(一看就是clash用户)让scoop网络连接走代理,后面的ip地址和端口根据自己的代理设置。
  2. 使用Gitee镜像源。可能备份更新得不是那么勤快,以及实际下载软件包同样会有网络问题,所以不推荐。在命令行中输入scoop config SCOOP_REPO https://gitee.com/squallliu/scoop修改仓库源的地址。

(或者更直接点,找到Scoop配置文件,路径C:\Users\username\.config\scoop\config.json,然后直接修改里面的配置,如下图:

Scoop配置文件)

Scoop常用命令

Scoop的操作命令十分简单,基本结构是scoop + 动词 + 对象,动词就是一个操作动作,如安装、卸载,对象一般就是软件名了(支持通配符*操作),当然这需要你先打开命令行工具。比如我想安装typora,通过输入scoop install typora即可自动完成软件的官网进入+下载+安装等操作。

以下是一些常用的命令说明:

  • search——搜索仓库中是否有相应软件。
  • install——安装软件。
  • uninstall——卸载软件。
  • update——更新软件。可通过scoop update *更新所有已安装软件,或通过scoop update更新所有软件仓库资料及Scoop自身而不更新软件。
  • hold——锁定软件阻止其更新。
  • info——查询软件简要信息。
  • home——打开浏览器进入软件官网。

如果忘记了,可通过输入scoop help来查询语法,以及更多不怎么常用的操作指导。

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
C:\Users\skeathy>scoop help
Usage: scoop <command> [<args>]

Some useful commands are:

alias Manage scoop aliases
bucket Manage Scoop buckets
cache Show or clear the download cache
cat Show content of specified manifest.
checkup Check for potential problems
cleanup Cleanup apps by removing old versions
config Get or set configuration values
create Create a custom app manifest
depends List dependencies for an app
export Exports (an importable) list of installed apps
help Show help for a command
hold Hold an app to disable updates
home Opens the app homepage
info Display information about an app
install Install apps
list List installed apps
prefix Returns the path to the specified app
reset Reset an app to resolve conflicts
search Search available apps
status Show status and check for new app versions
unhold Unhold an app to enable updates
uninstall Uninstall an app
update Update apps, or Scoop itself
virustotal Look for app's hash on virustotal.com
which Locate a shim/executable (similar to 'which' on Linux)


Type 'scoop help <command>' to get help for a specific command.

在实际使用过程中,我们可以先通过search命令查询一下是否有相应软件,软件名称是否正确,然后通过install命令完成软件的安装。另外,有两个必备的软件需要安装——git和7zip,建议完成Scoop安装后先执行以下命令:scoop install git 7zip(没错,Scoop支持多个软件同时依次安装),虽然后续操作中未安装这两个软件时也会提醒用户安装就是了。

推荐软件仓库

软件仓库是Scoop软件管理的重要基础,通过json文件记录仓库中每一个软件的信息,从而实现软件的管理等便捷命令行操作,并由仓库管理员(其实开源项目都是大家用爱发电)负责软件信息的更新。

前面提到,默认安装Scoop后仅有main仓库,其中主要是面向程序员的工具,对于一般用户而言并不是那么实用。好在Scoop本身考虑到了这一点,添加了面向一般用户的软件仓库extras,其中收录大量好用的小软件,足够日常的使用。

Scoop添加软件仓库的命令是scoop bucket add bucketname (+ url可选)。如添加extras的命令是scoop bucket add extras,执行此命令后会在scoop文件夹中的buckets子文件夹中添加extras文件夹。

此外,Scoop官方还有一些仓库可供使用,本人没有什么需求就不在此处介绍了,仅贴一下官方的介绍:

  • main - Default bucket for the most common (mostly CLI) apps
  • extras - Apps that don’t fit the main bucket’s criteria
  • games - Open source/freeware games and game-related tools
  • nerd-fonts - Nerd Fonts
  • nirsoft - Almost all of the 250+ apps from Nirsoft
  • java - A collection of Java development kits (JDKs), Java runtime engines (JREs), Java’s virtual machine debugging tools and Java based runtime engines.
  • nonportable - Non-portable apps (may require UAC)
  • php - Installers for most versions of PHP
  • versions - Alternative versions of apps found in other buckets

除了官方的软件仓库,Scoop也支持用户自建仓库并共享,于是又有很多大佬提供了许多好用的软件仓库。这里强推dorado仓库,里面有许多适合中国用户的软件,或者你有兴趣可以去看看仓库作者关于Scoop更多技术方面的探讨。添加dorado仓库的命令如下:scoop bucket add dorado https://github.com/chawyehsu/dorado

此外,若多个仓库间的软件名称冲突,可以通过在软件名前添加仓库名的方式避免冲突,如scoop install dorado/appname

最后,分享一下自己的软件列表:

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
C:\Users\skeathy>scoop list
Installed apps:

7zip 21.07 [main]
aria2 1.36.0-1 [main]
captura 8.0.0 [extras]
ccleaner 5.89.9401 [extras]
clash-for-windows 0.19.7 [dorado]
dark 3.11.2 [main]
dingtalk 6.3.25.1219101 [dorado]
dismplusplus 10.1.1002.1 [extras]
draw.io 16.5.1 [extras]
ffmpeg 5.0 [main]
git 2.35.0.windows.1 [main]
github 2.9.6 [extras]
gridea 0.9.2 [extras]
innounp 0.50 [main]
lessmsi 1.10.0 [main]
marktext 0.16.3 [extras]
neteasemusic 2.9.6.199543 [dorado]
nodejs 17.4.0 [main]
obs-studio 27.1.3 [extras]
pandoc 2.17.0.1 [main]
picgo 2.3.0 [dorado]
potplayer 220106 [extras]
qbittorrent 4.4.0 [extras]
rufus 3.17 [extras]
steam nightly-20200720 [extras]
sublime-text 4-4126 [extras]
sumatrapdf 3.3.3 [extras]
trafficmonitor 1.82 [extras]
typora 0.11.18 *hold* [extras]
utools 2.5.2 [dorado]
ventoy 1.0.64 [extras]
wechat nightly-20201231 [dorado]
xmind8 3.7.9 [extras]

相关类似工具对比

最好的教程肯定是官方文档,所以有需求的读者可以直接访问官方网站。这篇文章也主要不是来写教程的,而是一种产品体验与思考。所以,在文章的最后,我想简单做个竞品分析,说说是什么让我最终一直在使用Scoop。

有关于同类产品,这里主要总结三个:

  1. Microsoft Store软件商店,含GUI的常规软件商店。
  2. Chocolatey,另一个第三方命令行软件管理工具。
  3. Winget,微软官方近两年的开源命令行软件管理工具。

竞品对比列表

评估指标 Microsoft Store Chocolatey Winget Scoop
GUI
开源
软件搜索、安装、更新
已安装软件查看与卸载
回滚版本与锁定版本
导出与备份
数据管理与清理

(以上表格为核心需求对比,可能有不准确的地方待修改。)

  • GUI——Windows 11的Microsoft Store颜值非常高,Chocolatey有一个不怎么好看的GUI,Scoop有第三方GUI。不过实际使用下来发现命令行一行代码的体验也不差,反而清晰明了更加高效,GUI在用户体验方面也不一定是优势。
  • 开源——我可太爱开源软件了,虽然开源软件一般不如商业软件稳定,但是我可以自己提需求甚至自己去改很是舒服。
  • 软件搜索、安装、更新——需求中基础的基础,不能实现的话也别用了。为了更好地使用最新版的软件,体验稳定的新功能,我可是积极的更新派,但是让我去使用不稳定的beta版本当测试就不是那么愿意了。
  • 回滚版本与锁定版本——并不是那么要紧的需求,但对于某些开发人员来说为了稳定就是非常重要的需求了。
  • 导出与备份——并不是那么要紧的需求,但对于某些人员来说快速安装系统是非常重要的需求。
  • 数据管理与清理——主要就是软件管理逻辑方面的需求了(强迫症需求),除了Scoop其他工具的数据管理一言难尽吧,虽然Scoop许多第三方仓库中的软件也没实现好。

对比总结

综合而言,Scoop最能满足我的需求——软件生态链基本满足我的需求(大型软件我会另外安装),对于小软件的管理实在方便;理论上备份Scoop中的软件只需要复制整个根目录,然后新系统上安装好Scoop再覆盖掉初始文件即可;有一些小bug,比如安装的软件在控制面板找不着,固定到任务栏有奇怪的双开bug,不过这些实际上对于用户体验影响不大,完全可以接受;另外就算有一些严重影响使用的问题,GitHub上提交个issue马上就有大佬解决了。

Chocolatey各方面都与Scoop类似,在软件生态和稳定性方面更优。在开源和数据管理方面略输一筹,不能设定安装目录(高级版似乎可以),使用默认安装包逻辑安装稍微有一些劝退。

Winget是一个还没怎么完善的产品,可以肯定Winget启发于Chocolatey或Scoop。但是目前似乎bug还挺多,更新软件后依旧显示未更新的版本是我忍受不了的一个bug,所以虽然系统已经自带,不过我还是没怎么使用。Winget也使用软件默认安装包的逻辑进行安装,对于小众开源软件支持不佳,此外据说甚至会有捆绑安装的现象,属实劝退。当然,winget也有其最大的优势,可以和常规安装的方式共存,通过命令行操作扫描所有已安装软件,且对大众软件的支持最佳。期待后续版本可以做得更好。

Microsoft Store挺好用的,有很多软件我也一直在应用商店下载更新。只是软件生态太差了,好多软件不支持或者更新远比不上同一桌面端软件,期待后续软件生态可以更好,做到类似Mac App Store的程度。

*那么有没有大佬想要构建一个基于Scoop的GUI工具呢?之前找到的那个GUI工具似乎不是那么好用。。。毕竟不是所有人都喜欢使用命令行工具的。


Scoop——也许是Windows平台最好用的软件(包)管理器
https://skeathytomas.github.io/post/scoop——也许是windows平台最好用的软件(包)管理器/
作者
Skeathy
发布于
2022年1月17日
许可协议