scoop vs winget — Windows 包管理器对比与分工
winget 管桌面应用,scoop 管 CLI/便携工具。两者并用——配置方法与实践分工。
Windows 的包管理器没有像 macOS Homebrew 那样统一的标准。winget(微软官方)和 scoop(社区维护)各有明确的优势与不足,通常两者并用才是最优解。本指南涵盖差异对比、安装配置与实践分工。
我认为 Windows 包管理的答案不是选其中一个,而是理解各自的安装位置和权限模型。以前开发者被迫在两者间选择;如今 winget 管桌面应用、scoop 管 CLI 工具的分工方式,由于权限需求不同,各自做最擅长的事才是最合理的分工。
目标环境:Windows 10/11(已完成 Windows 初始设置)。
TL;DR
| 项目 | winget | scoop | Chocolatey |
|---|---|---|---|
| 维护方 | 微软官方 | 社区 | 社区 |
| 安装位置 | 系统级(需管理员) | ~/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 -e1.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-fonts2.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 touch2.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. 实践分工表
| 类别 | 管理器 | 示例 |
|---|---|---|
| 浏览器 | winget | Chrome、Firefox、Edge |
| 编辑器/IDE | winget | VS Code、Cursor、JetBrains Toolbox |
| 通讯应用 | winget | Slack、Discord、Notion |
| Git 客户端 | winget | Git for Windows、GitHub Desktop |
| 容器 | winget | Docker Desktop |
| 虚拟化 | winget | VirtualBox、VMware |
| 字体(Nerd) | scoop | JetBrainsMono-NF、FiraCode-NF |
| CLI 工具 | scoop | jq、fzf、ripgrep、fd、bat、eza、gh、delta |
| Shell 工具 | scoop | sudo、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 不到一小时就能就绪。
验证
winget --version/scoop --version均正常winget list/scoop list显示已安装包gh --version— scoop 安装的工具在 PATH 中code --version— winget 安装的工具在 PATH 中winget upgrade --all/scoop update *— 均成功
故障排查
winget 缺失(Windows 10)
- 微软应用商店 → 更新「App Installer」
- 旧于 21H1:升级操作系统
scoop 安装失败,提示「running scripts is disabled」
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUserwinget 提示「Failed when searching source」
winget source reset --force
winget source updatescoop 包不在 PATH 中
- 打开新终端——scoop 安装后更新 PATH,但现有 shell 不会自动看到
- 或者
$env:Path = [System.Environment]::GetEnvironmentVariable("Path", "User")
同一工具冲突
Get-Command foo -All 检查 PATH 顺序。移除其中一个并重新安装。
scoop 字体未生效
- scoop 按用户安装字体,其他用户/系统服务不可见
- 系统级安装请用 winget 或手动安装
参考资料
- Windows 初始设置 — winget 基础
- PowerShell 7 配置 — pwsh 环境
- WSL2 调优 — Linux 包管理器(apt/dnf)
- winget(官方)
- scoop(官方)
- Chocolatey
更新日志
- 2026-05-12:初稿。winget vs scoop vs Chocolatey 对比 + 分工表 + 自动化脚本 + 六个故障排查案例。