☰
Scoop使用教程:Windows包管理器安装配置与开发环境搭建指南
2026/10/19 6:33:34 网站建设 项目流程

开头

如果你还在用一个个双击安装包、勾选下一步、找个专门目录存放软件的方式装Windows程序,那你十有八九尝过这几个苦头:装哪个版本完全靠记忆、卸载的时候残留一堆注册表和缓存、从官网下载软件还要担心下到第三方捆绑包、想批量更新时只能挨个检查。Scoop就是冲着这些问题来的。

我最早接触Scoop是在2021年初,那会儿正好在折腾Windows下的开发环境,装一遍Python、Node、Git、FFmpeg这些工具,光是下载和配PATH就要花掉半天。后来在同事的推荐下试了Scoop,用完就一个感觉:这不就是Linux下包管理器给Windows补上了么。它把软件安装变成了三条命令——搜索、安装、更新,软件本身存放在统一目录里,不会到处乱写,卸载也干净利落,完全不用跟系统注册表纠缠。

这篇教程面向的读者,主要是想把Windows当成开发主力机器的程序员、频繁折腾软件的环境爱好者,以及已经受够手动管理软件、想试试包管理器究竟能省多少事的人。我会从安装前的准备讲起,一直讲到日常使用和踩坑排查,每一步都给出可以直接照做的命令,也会把背后为什么要这样做的原因讲清楚。标题虽然写的是2021,但Scoop这套安装和配置流程到今天依然适用,核心机制基本没变过,所以照着做基本不会有过期问题。

1. 为什么我最终选择了Scoop

先花点篇幅说说选型,因为很多人一开始会纠结:Windows上能用的包管理器不是只有Scoop一个,还有老牌的Chocolatey、微软官方的WinGet,为什么选Scoop而不是别的?

1.1 传统安装方式到底麻烦在哪

传统Windows软件的安装方式,本质上就是让每个安装包自己决定往系统里写什么:程序主体放进Program Files,系统组件放进Windows\System32,用户数据放进AppData,再往注册表和PATH里塞几条记录。装三五个软件还好,装几十个之后,系统会变得越来越"脏"。

我自己最头疼的问题是PATH污染。各种安装器喜欢往系统环境变量里追加自己的目录,时间一长,PATH里面挤满了各式各样的路径。某天装了新软件后,命令行里输python却调起了一个莫名其妙的老版本,查了半天才发现是先前某个软件自带的解释器路径排在了前面。这种情况用Scoop基本不会出现,因为它把PATH的管理收拢到一个统一的机制里,后面我会详细讲。

卸载残留是另一个常见麻烦。普通软件卸载时,那些装进系统各处的文件不一定能全删干净,常见的表现就是卸载完还有服务在跑、右键菜单还在、AppData里留了一堆配置文件。Scoop的思路是"一个软件一个目录",卸载就是把整个目录删掉,外部只有少量链接指向它,清理非常干净。

1.2 和Chocolatey、WinGet的横向对比

Chocolatey是社区里很有影响力的老牌方案,WinGet是微软近几年力推的原生方案。三者目标相似,但设计思路差别很大,我列个表方便看:

对比项ScoopChocolateyWinGet
定位面向命令行工具的开发者工具面向系统级软件管理的全量工具面向Windows生态的官方方案
安装范围默认用户级,软件装到用户目录系统级,普遍需要管理员权限系统级,需要管理员权限
依赖处理通过"manifest"定义依赖,自动安装通过Choco包依赖体系处理依赖处理较弱,很多包需要手动装依赖
隔离性每个软件独立目录,卸载干净接近传统安装器,改动系统范围大走MSI/EXE通道,残留与否取决于包本身
适合场景开发工具、命令行工具、绿色软件需要安装桌面级大型软件的管理员日常软件安装、系统环境统一管理

我第一次试用Chocolatey时,安装一个软件就可能触发五六个依赖包,而且多数操作都要管理员权限,稍微不留神就把环境弄得乱七八糟。WinGet当时还在快速迭代阶段,包数量和质量都还不够稳定,部分包装完没法确认路径是否进入了PATH。Scoop让我最舒服的一点是"隔离"二字:它默认完全工作在用户目录里,不需要管理员权限,不会写注册表,软件更新和卸载都很透明。

1.3 什么场景下用Scoop最合适

Scoop不是万金油,它有非常明确的舒适区:命令行工具、编译器、脚本语言、数据库、图形界面工具中那些以绿色便携形式存在的。像是Git、Python、Node.js、FFmpeg、7zip、aria2、Redis、Nginx这些,用Scoop装是最爽的体验。

反过来,如果非要装Office、Photoshop这种重度依赖系统服务的商业软件,Scoop就帮不上忙了,这类软件还是走官方安装器更稳妥。所以我的习惯是"两条腿走路":系统级、图形化的常用软件用官方渠道,开发相关的命令行工具全部交给Scoop管理。这样一来,重装系统后只用一个脚本就能把开发环境全部恢复,这在后面做环境迁移时帮助非常大。

2. 安装之前的准备,一步都别省

Scoop的安装命令很短,网上一搜就能找到,但很多人照抄命令却安装失败,原因多半出在前面这些准备步骤上。

2.1 检查Windows版本和PowerShell

Scoop要求Windows 7以上系统,但如果你还停留在Windows 7,建议先把PowerShell至少升到3.0版本,否则后面执行安装脚本会遇到一堆兼容问题。更省心的是直接用Windows 10或Windows 11自带的PowerShell 5.1,或者装一个PowerShell 7,体验会好很多。

检查当前PowerShell版本,打开终端输入:

$PSVersionTable.PSVersion

输出里看到Major.Minor.Build这样的版本号即可。只要是5.1以上,基本没有门槛。另外Scoop安装脚本依赖于Invoke-RestMethod和Invoke-WebRequest这两个PowerShell命令,它们在5.0以后都是内置的,不需要额外装东西。

2.2 PowerShell执行策略,为什么必须改

Scoop的官方安装命令长这样:

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression

第一行就是改PowerShell执行策略。很多新手搞不懂这一步的意义,直接跳过了,结果第二行执行时提示"无法加载脚本,因为在此系统上禁止运行脚本"。

原因是Windows默认的执行策略是Restricted,不允许执行任何本地脚本;Scoop的安装脚本是从远程拉下来再执行的,PowerShell自然把它当作"未签名脚本"对待,默认拒之门外。改成RemoteSigned的意思是:本地脚本可以运行,远程下载的脚本必须带有效的数字签名才放行。这样一来,Scoop自身的脚本是不带签名的本地文件,能正常运行;而远程恶意脚本会被拦下,安全性不至于裸奔。

用-Scope CurrentUser而不是全局修改,是因为这个策略只需要对当前用户生效即可。如果你在团队环境里,不一定要动到机器级别的配置,这种改法影响最小。

2.3 是否需要Git:两种路径的差异

Scoop的一个设计特点是:核心管理器只负责"取回manifest文件、按描述下载、安装"这个流程,本身并不包含一个软件仓库。它的软件定义文件都是以Git仓库形式维护的,默认的mainbucket就是从Scoop官方仓库拉取。

如果你没有装Git,Scoop安装脚本会自动下载一个便携版Git,专门放在Scoop自己的目录里给Scoop内部使用。这样做的好处是开箱即用,不需要预先准备任何工具;代价是如果你已经有了Git,没被识别出来,等于白白多下载一份。

如果你希望让Scoop使用系统已有的Git,可以用下面的顺序装:

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser [Environment]::SetEnvironmentVariable('SCOOP_GIT', "$env:USERPROFILE\scoop\apps\git\current") Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression

不过这个配置要在Scoop装完之后才会生效,因为$env:USERPROFILE\scoop\apps\git\current这个目录本身是Scoop创建出来的。实际操作中大多数人不会刻意去配这个,让Scoop自己带Git是最简单的路径。我个人推荐先不管Git的事,装完Scoop后再通过Scoop装一个正正经经的Git,两条路互不冲突。

3. 手把手完成Scoop安装

准备工作做完,正式安装其实只要几分钟。这一节把三种主流安装方式都过一遍,你按自己情况选一种就行。

3.1 标准安装:装到当前用户的目录

这是最推荐的方式,也是我平时给朋友远程配置时的首选。打开PowerShell,依次执行:

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression

执行完会看到一堆输出,最后提示Scoop is ready!,然后别急着关窗口,先执行一条验证命令:

scoop --version

能正常显示版本号就说明安装成功了。安装完成后,Scoop的目录默认是C:\Users\你的用户名\scoop,里面有三个子目录:

  • apps:存放所有通过Scoop安装的软件本体
  • buckets:存放软件源的仓库文件
  • cache:下载的安装包缓存

这种方式的优点是权限要求最低,不需要管理员账号,也不会往系统PATH里写额外内容,所有改动都限制在当前用户目录范围内。重装系统前把这个目录备份一下,恢复环境非常轻松。

3.2 全局安装模式:需要管理员时怎么弄

如果你希望Scoop安装的软件对电脑上的所有用户都可用,而不是只限当前用户,就得用全局模式。全局安装路径默认是C:\ProgramData\scoop,这个目录虽然也在系统盘,但读写权限和普通安装目录不同,所以安装时需要管理员权限。

全局模式在安装时指定的方式和标准模式不一样,官方提供的是在管理员PowerShell里执行:

Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression -ArgumentList @('-RunAsAdmin')

效果是装出来的Scoop默认以全局模式工作。不过日常使用中也可以随时对一个单独的软件指定全局安装:

scoop install -g nginx

需要说明的是,同一个软件最好不要既装用户级又装全局级,否则shim冲突会让你摸不着头脑。如果你一开始装了用户级,后来发现某个软件确实需要全局访问,先把用户级的卸载掉再装全局版,路径才干净。

3.3 自定义安装路径的注意事项

有些人不喜欢把软件放在C盘,想装到D盘等数据盘。Scoop允许通过环境变量指定路径,做法是先设置SCOOP环境变量,再执行安装脚本:

$env:SCOOP='D:\Apps\Scoop' [Environment]::SetEnvironmentVariable('SCOOP', $env:SCOOP, 'User') Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression

如果你是全局模式,相应的变量是SCOOP_GLOBAL:

$env:SCOOP_GLOBAL='D:\Apps\ScoopGlobal' [Environment]::SetEnvironmentVariable('SCOOP_GLOBAL', $env:SCOOP_GLOBAL, 'Machine')

这里有个很重要的坑:自定义路径不要包含中文和空格。Scoop的manifest解析和shim链接对带空格的路径支持并不完善,装某些依赖多、运行时路径复杂的软件时会莫名其妙报错。另外,放在NTFS分区的盘符路径可以,但像U盘、移动硬盘这类频繁插拔的介质不建议放,因为Scoop在卸载、清理依赖时会频繁读写目录,移动介质出错的概率更高。

3.4 安装失败时的常规检查

如果执行安装脚本时报错,先别急着重新跑命令,按顺序检查这几件事:

  1. 执行策略是否已改成功:运行Get-ExecutionPolicy,看到RemoteSigned才是对的。
  2. 网络能不能访问Scoop的下载地址:在浏览器里打开https://get.scoop.sh,能打开就说明基本连通。
  3. 是否因为代理导致脚本拉取失败:公司网络或本地开代理工具的,容易遇到TLS握手失败或证书问题,可以临时关掉代理再试一次。

安装脚本本身很成熟,绝大多数安装失败都是这三项中的一项导致的。排查完再重新执行,成功率会提高很多。

4. 安装之后,先把这些配置做了

Scoop装完就上手直接用,其实也不算错,但我会建议你先花十几分钟理解它的目录结构和shim机制,再做两三个小配置。这样后面用到高频命令时会顺畅得多。

4.1 理解Scoop的核心机制:shim和json清单

安装完Scoop后,你会注意到C:\Users\你的用户名\scoop\shims目录里躺着很多exe文件,它们体积都很小。这些就是Scoop的"shim",翻译成大白话就是"中间人"。

Scoop安装一个软件时,不会把软件的目录直接塞进PATH,而是只把该软件可执行文件的shim放到shims目录,再把shims目录加入PATH。你每次在命令行里输入git、python、node,实际启动的是shim,shim再去定位对应软件具体版本的可执行文件。这就是为什么Scoop能做到多版本共存:apps\python\3.9.5和apps\python\3.10.8可以同时存在,shim指向哪一个只取决于你执行了scoop link python@3.10.8这样的版本切换命令。

同时,每个软件的安装描述都在对应bucket的json文件里写清楚了:下载地址、解压路径、二进制目录、依赖关系、需要写入PATH的命令。Scoop官方把这类文件叫manifest,正是它们的存在才让"安装、卸载、更新"对包管理器来说是透明的。

明白这套结构,你就很容易理解为什么Scoop卸载软件特别干净:卸载不过就是删掉apps\某软件目录,再删掉对应的shim,不做额外动作。没有注册表的写入,没有系统服务的注册,自然也没那么多残留。

4.2 更换下载源与设置代理

Scoop默认从官方CDN地址下载软件包。在国内网络环境下,部分包下载速度很慢,或者干脆卡住,所以配置一个可用的下载源非常关键。

Scoop支持通过aria2加速下载。先安装它:

scoop install aria2

装完后Scoop会自动调用aria2做多线程下载。如果要用镜像源加速GitHub上的下载,可以给Scoop配置代理,比如你的本地代理服务端口是7890,执行:

scoop config proxy 127.0.0.1:7890

注意这里的"代理"指的是HTTP代理配置,是Scoop本身为软件包下载提供的网络设置选项。如果你没有代理需求,就用默认直连;如果下载慢,最简单的做法是安装aria2后观察速度是否改善。另外,scoop config可以设置很多选项,比如SCOOP_REPO(默认源仓库地址)、SCOOP_BRANCH(更新分支)等,按需调整即可。

4.3 添加bucket扩展软件源

Scoop默认只有官方的mainbucket,里面包含的都是命令行工具和开发相关的软件。很多常见软件并不在main里,比如extrasbucket里有Telegram、Discord、Notepad++等图形化软件。添加bucket的命令:

scoop bucket add extras

类似的常用bucket还有:

  • main:默认核心bucket,装完Scoop就有
  • extras:包含大量GUI软件和常用工具
  • versions:提供软件的历史版本,需要特定版本时有用
  • java:管理JDK、OpenJDK等多版本Java
  • nerd-fonts:开发者字体

添加完bucket后可以搜索了。我个人通常会把extras和versions两个加上,覆盖面已经很广。如果你的项目出现"找不到某个软件"的情况,大概率是没加对应的bucket。

5. 日常使用中的高频命令和实际场景

配置完成后,Scoop就进入"即用即走"的状态。下面这些命令是我每天都会用到的,也是你上手后真正会被反复敲的。

5.1 搜索、安装、卸载、更新的完整用法

搜索软件用scoop search,支持模糊匹配:

scoop search python

结果会列出匹配的软件名和所属bucket。安装软件时,如果你的搜索词能唯一对应一个软件,可以直接安装:

scoop install python

如果同一名字出现在多个bucket里,Scoop会提示你用scoop install 软件名或scoop install 所在bucket/软件名的形式来指定。比如想装extras里的某个软件,就写成:

scoop install extras/notepadplusplus

更新软件相关的命令有几个容易混淆,我在这里把你可能会用到的都列一下:

scoop update # 更新Scoop自身和所有bucket的manifest,不更新软件 scoop update python # 更新指定软件 scoop update --all # 更新所有软件 scoop update --force # 强制更新,绕过版本比较

卸载软件只要一句:

scoop uninstall python

如果你的软件还有其他软件依赖,Scoop会提醒你依赖关系,不会直接拆掉别的软件还要用到的东西,这点很贴心。

5.2 查看状态并清理缓存

scoop status命令会列出哪些软件有更新可装、哪些软件当前处于"未连接"状态。我习惯每周跑一次:

scoop status

输出里会显示New version available之类的提示,用scoop update --all一把梭更新。

scoop cleanup用来清理软件的旧版本文件。Scoop更新时通常保留旧版本,方便你回滚,但时间长了apps目录会膨胀。执行:

scoop cleanup --all --cache

这会把不再被引用的旧版本文件清掉,同时清空下载缓存。cache目录有时候会占到好几个GB(尤其是下载大的安装包),定期清理很值得。

5.3 典型场景演示:用Scoop搭建一个开发环境

假设你重装了一台Windows电脑,想快速恢复开发环境,大概可以这么做:

scoop install git nodejs python openjdk ffmpeg

这四条命令会依次安装Git、Node.js、Python、OpenJDK、FFmpeg并自动配置PATH。装完后在任意新终端里输入git --version、node -v、python --version,都能直接看到版本号,不需要手动设置环境变量。

如果你平时还需要用Redis、MySQL这类服务,也可以:

scoop install redis mysql

Scoop会为这些服务安装好相关的可执行文件,让你在命令行里能直接操控。相比去官网下载安装包、再手动配置服务,这个流程的效率和一致性都高了不少。

实际工作中我很依赖scoop update --all这个命令,因为它的更新是"批量且可回滚"的。更新完如果发现某个版本有兼容问题,只需要scoop reset 软件名 旧版本号就能切回去,这个操作的代价比传统安装方式小得多。

6. 我把新手的坑都替你踩了一遍

以下经验是我在大量使用Scoop期间实实在在遇到并排查过的问题,每一条都来自实操,照着这个思路排查能省不少冤枉时间。

6.1 安装软件时报"Move-Item"错误的排查链路

有段时间我一执行scoop install,就报类似Move-Item: 无法将路径...重命名的错误,部分软件装到一半就中断。排查链路是这样的:

第一阶段:看错误发生时机。报错出现在Scoop下载完成后、把文件从临时目录移动到apps目录时。这个阶段基本可以排除网络问题。

第二阶段:检查磁盘空间。执行Get-PSDrive -Name C看剩余空间,如果不足就清理缓存和旧版本。

第三阶段:检查权限。如果你当前用户对Scoop目录没有完整控制权(比如目录是从别的用户复制过来的),重命名操作就会失败。解决办法是右键Scoop目录,安全标签页里给当前用户设置完全控制权限。

第四阶段:排除杀毒软件干扰。部分安全软件会把Scoop的"下载后移动文件"行为判断为可疑动作,导致文件被隔离。如果前三步都正常,暂时关闭安全软件的实时防护再试一次即可定位。

6.2 下载慢或超时的根本原因和处理

Scoop默认从软件官方地址下载,在国内直连GitHub常常不稳定。你可能会遇到scoop install卡在下载阶段很长时间,最终报超时。

处理方式按优先级排列:

  1. 安装aria2。Scoop会检测到aria2并自动用它加速,分段并发下载速度提升明显。
  2. 给Scoop配置HTTP代理。如果本地有代理工具,执行scoop config proxy 127.0.0.1:端口号,Scoop会把这个代理用于下载请求。
  3. 更换bucket仓库源。scoop config SCOOP_REPO可以将Scoop的bucket仓库切换为可访问的镜像源。

优先级顺序的原因是:aria2最简单、改动最小;代理需要你有现成的代理环境,没有的话别折腾;换源则影响面更大,改了之后Scoop拉取manifest的方式也会变,尽量在必要时才操作。

6.3 shim冲突和PATH顺序问题

装了多个包含同名命令的软件时,shim会发生冲突。最典型的是Git自带的bash.exe和系统里其他Linux工具包的bash.exe同时在shims目录里,Scoop会在安装时提示Couldn't create shim之类的信息。

遇到这种情况,先看提示里对哪个软件创建shim失败,然后把不需要的软件卸载掉,或调整Scoop的shim优先级。Scoop在创建shim时会检查有没有同名命令,如果已存在,它通常不做覆盖,而是报错。解决办法之一是用scoop install --no-shim安装特定软件,手动创建对应链接;不过我一般建议直接卸载冲突软件,除非你确实非常需要同时保持两个。

另外,你手动在系统环境变量里添加的PATH项,可能会跑到Scoop的shims目录前面,导致命令行里执行命令时优先调用老版本。我遇到过一次:系统PATH里有个老的Python安装目录排在shims之前,导致scoop install python后输入python --version依然是旧版本。解决方案是把shims目录在PATH里的位置提前,或者删掉旧的手动Python目录。

6.4 更新后软件无法运行的恢复方法

scoop update --all一键更新很爽,但偶尔也会翻车。某次我把ffmpeg更新到新版,结果运行的脚本依赖老版的输出格式,直接跑挂了。

Scoop没把旧版删掉,这对回滚很有帮助。先看当前版本和历史版本:

scoop list ffmpeg scoop reset ffmpeg 4.4

reset命令会把shim指回指定版本。如果连数据库里也没保留旧版本记录,只能重新用scoop install ffmpeg@版本号安装指定版本,但这样会覆盖当前版本,建议先备份apps\ffmpeg目录再操作。

还有一类情况是软件自身在安装后需要写入配置,这部分写在scoop\persist目录下。Scoop更新时专门保留persist目录,让配置文件不会因为升级丢失。如果你发现升级后配置依然丢了,多半是软件把配置写到了别的位置(比如用户目录或注册表),那就不属于Scoop的职责范围了。

6.5 关于Scoop的日常工作流建议

用顺了之后,我会在每隔一两周做一次系统环境"巡检":

scoop update scoop status scoop update --all scoop cleanup --all --cache

如果你在一个团队里,可以约定大家都用Scoop管理开发依赖,然后把常用软件的清单写进一个脚本文件里,新人入职跑一遍就能拥有和团队一致的开发环境。这个方案比每个人手动装软件、等发现问题再修要高效得多。

我自己现在装新电脑的第一件事,就是打开PowerShell执行Scoop安装命令,然后批量恢复所有命令行工具。安装Windows之后的第一次软件铺设,原本可能折腾一下午,现在压缩成十分钟以内。最后分享一个小习惯:每次装新软件前先scoop search一下,确认官方manifest存在,尽量优先用Scoop装而不是去官网下载,这样你的软件清单会始终保持在一个可管理、可复制的状态。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询