devAlice
← Windows

scoop vs winget — Windows 包管理器对比与分工

winget 管桌面应用,scoop 管 CLI/便携工具。两者并用——配置方法与实践分工。

Windows 的包管理器没有像 macOS Homebrew 那样统一的标准。winget(微软官方)和 scoop(社区维护)各有明确的优势与不足,通常两者并用才是最优解。本指南涵盖差异对比、安装配置与实践分工。

我认为 Windows 包管理的答案不是选其中一个,而是理解各自的安装位置和权限模型。以前开发者被迫在两者间选择;如今 winget 管桌面应用、scoop 管 CLI 工具的分工方式,由于权限需求不同,各自做最擅长的事才是最合理的分工。

目标环境:Windows 10/11(已完成 Windows 初始设置)。

TL;DR

项目wingetscoopChocolatey
维护方微软官方社区社区
安装位置系统级(需管理员)~/scoop/(用户级,无需管理员)系统级(需管理员)
优势桌面 GUI 应用、官方目录CLI 工具、便携、隔离目录最老牌
劣势CLI 工具目录较弱桌面 GUI 应用较少每次弹 UAC
权限通常需要管理员用户级需要管理员
推荐用途桌面应用(Chrome、VS Code 等)开发 CLI(jq、fzf、gh、neovim 等)仅用于前两者都没有的情况

推荐:winget(桌面应用)+ scoop(CLI 工具)。Chocolatey 仅在两者都找不到时使用。

1. winget — 桌面应用优先

1.1 确认已安装

Win11 和 Win10 21H1+ 内置。验证:

winget --version
# v1.7.x 或更高

如未安装,通过微软应用商店更新「App Installer」。

1.2 常用命令

# 搜索
winget search vscode
 
# 安装
winget install --id Microsoft.VisualStudioCode -e
 
# 升级所有包
winget upgrade --all
 
# 列出已安装
winget list
 
# 卸载
winget uninstall --id ...

1.3 推荐的 winget 包

# 浏览器 / 编辑器
winget install --id Google.Chrome -e
winget install --id Mozilla.Firefox -e
winget install --id Microsoft.VisualStudioCode -e
 
# 通讯
winget install --id Notion.Notion -e
winget install --id SlackTechnologies.Slack -e
winget install --id Discord.Discord -e
 
# 开发
winget install --id Git.Git -e
winget install --id Docker.DockerDesktop -e
winget install --id Microsoft.PowerShell -e
winget install --id JetBrains.Toolbox -e
 
# 实用工具
winget install --id 7zip.7zip -e
winget install --id Anysphere.Cursor -e
winget install --id Tailscale.Tailscale -e

1.4 导出 / 导入

# 导出当前机器的包列表
winget export -o packages.json
 
# 在新机器上导入
winget import -i packages.json

一键恢复所有 GUI 应用——换新电脑时省时神器。

2. scoop — CLI 工具优先

2.1 安装

无需管理员 PowerShell:

# 永久解锁执行策略(一次)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
 
# 安装 scoop
irm get.scoop.sh | iex

安装位置:~\scoop\(用户文件夹)。不修改系统 = 干净。

2.2 初始配置

# 更好的搜索(跨非主要 bucket)
scoop install scoop-search
 
# 添加扩展 bucket(extras、versions、java 等)
scoop bucket add extras
scoop bucket add versions
scoop bucket add java
scoop bucket add nerd-fonts

2.3 常用命令

scoop search jq           # 搜索
scoop install jq          # 安装
scoop update              # 拉取所有 manifest
scoop update *            # 升级所有包
scoop list                # 列出已安装
scoop uninstall jq        # 卸载
scoop cleanup *           # 清理旧版本

2.4 推荐的 scoop 包

# CLI 必备
scoop install jq          # JSON 命令行处理
scoop install fzf         # 模糊查找器
scoop install ripgrep     # rg,grep 替代
scoop install fd          # find 替代
scoop install bat         # 带语法高亮的 cat
scoop install eza         # ls 替代
scoop install gh          # GitHub CLI
scoop install neovim
scoop install delta       # git diff 分页器
 
# 字体
scoop install JetBrainsMono-NF
scoop install FiraCode-NF
 
# 系统工具
scoop install sudo        # PowerShell 的 WSL 风格 sudo
scoop install which
scoop install grep        # GNU grep
scoop install sed         # GNU sed
scoop install touch

2.5 导出 / 导入

# 导出——JSON 格式
scoop export -c > scoop.json
 
# 在新机器上导入
scoop import scoop.json

与 winget 相同的模式,两台机器的配置自动化。

3. 避免冲突

用两个管理器安装同一工具会导致歧义(取决于 PATH 顺序,不知道哪个会运行)。

原则:一个工具,一个管理器。用 Get-Command git -All 检查重复。

3.1 Git

  • winget Git for Windows = 完整 SSH/GCM/帮助(推荐)
  • scoop git = 更轻量,便携
  • 通常使用 winget Git(含 GCM 集成)。

3.2 Node / Python

  • 两者都能安装,但优先使用 mise / nvs / pyenv-win(版本管理器)
  • 参见 mac/dev-toolchain——mise 在 Windows 上同样可用。

3.3 VS Code

  • 仅用 winget——集成自动更新
  • scoop 版 vscode 是便携版,无自动更新

4. Chocolatey — 何时使用?

偶尔会有 winget 和 scoop 都没有的东西(特定企业软件、驱动程序)。Chocolatey 的目录最老、最全。

# 管理员 PowerShell
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
choco install <pkg> -y

每次都需要 UAC 授权。建议:最后手段

5. 实践分工表

类别管理器示例
浏览器wingetChrome、Firefox、Edge
编辑器/IDEwingetVS Code、Cursor、JetBrains Toolbox
通讯应用wingetSlack、Discord、Notion
Git 客户端wingetGit for Windows、GitHub Desktop
容器wingetDocker Desktop
虚拟化wingetVirtualBox、VMware
字体(Nerd)scoopJetBrainsMono-NF、FiraCode-NF
CLI 工具scoopjq、fzf、ripgrep、fd、bat、eza、gh、delta
Shell 工具scoopsudo、which、neovim
补丁 / 驱动(手动或 Chocolatey)NVIDIA Studio Driver 等

6. 自动化脚本(可选)

自动化新 Windows 搭建的前 30 分钟。setup.ps1

# winget — 桌面应用
$wingetApps = @(
    "Google.Chrome",
    "Microsoft.VisualStudioCode",
    "Anysphere.Cursor",
    "Git.Git",
    "Microsoft.PowerShell",
    "Docker.DockerDesktop",
    "JetBrains.Toolbox",
    "Tailscale.Tailscale",
    "AgileBits.1Password",
    "AgileBits.1Password.CLI"
)
foreach ($app in $wingetApps) {
    winget install --id $app -e --accept-package-agreements --accept-source-agreements
}
 
# scoop — CLI 工具
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
irm get.scoop.sh | iex
scoop bucket add extras
scoop bucket add nerd-fonts
 
$scoopApps = @(
    "jq", "fzf", "ripgrep", "fd", "bat", "eza", "gh", "delta",
    "neovim", "sudo", "JetBrainsMono-NF"
)
foreach ($app in $scoopApps) {
    scoop install $app
}

运行:

PowerShell -ExecutionPolicy Bypass -File .\setup.ps1

Windows 初始设置setup-windows.ps1 结合使用,一台新 Windows 不到一小时就能就绪。

验证

  1. winget --version / scoop --version 均正常
  2. winget list / scoop list 显示已安装包
  3. gh --version — scoop 安装的工具在 PATH 中
  4. code --version — winget 安装的工具在 PATH 中
  5. winget upgrade --all / scoop update * — 均成功

故障排查

winget 缺失(Windows 10)

  • 微软应用商店 → 更新「App Installer」
  • 旧于 21H1:升级操作系统

scoop 安装失败,提示「running scripts is disabled」

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

winget 提示「Failed when searching source」

winget source reset --force
winget source update

scoop 包不在 PATH 中

  • 打开新终端——scoop 安装后更新 PATH,但现有 shell 不会自动看到
  • 或者 $env:Path = [System.Environment]::GetEnvironmentVariable("Path", "User")

同一工具冲突

Get-Command foo -All 检查 PATH 顺序。移除其中一个并重新安装。

scoop 字体未生效

  • scoop 按用户安装字体,其他用户/系统服务不可见
  • 系统级安装请用 winget 或手动安装

参考资料

更新日志

  • 2026-05-12:初稿。winget vs scoop vs Chocolatey 对比 + 分工表 + 自动化脚本 + 六个故障排查案例。