软件包管理工具是在计算机上自动安装、配置、卸载和升级软件包的工具。 基于命令行的包管理工具已在 *NIX 世界中广泛使用。 无论是 macOS 的 Homebrew 还是各大 Linux 发行版的包管理(APT、Yum、Pacman...),它们不仅有完善的使用机制,还有丰富的软件包生态系统,是*的最佳选择NIX系统软件包的安装和管理。
Windows在“包管理工具”方面一直表现平平。 社区的努力让Windows有了我强烈推荐的Chocolatey和Scoop。 Windows本身历史上曾推出过具有类似“包管理工具”功能的OneGet和NuGet。 不过,前两者始终依赖社区维护者的厚爱,而后两者则更注重开发环境中的软件安装,不提供日常用户使用的软件,因此并不完美。
WinGet - Windows 官方包管理工具
在刚刚结束的 Microsoft Build 2020 上,微软终于发布了面向普通 Windows 用户的官方 Windows“包管理工具”——Windows Package Manager,也称为 WinGet。 有了WinGet,Windows用户终于可以通过官方渠道在命令行环境下管理软件了。
下载并安装
WinGet 支持 Windows 10 版本 1709 及更高版本。 现在使用Windows 10的同学可以直接下载安装。 官方提供了以下安装方法:
通过微软商店下载
目前WinGet还处于Preview阶段,所以如果你想使用官方渠道安装WinGet,那么你需要:
之后,WinGet 本身(在命令行环境中)应该出现在您的系统上,并且可以通过 Microsoft Store 同步更新。
通过 GitHub Release 手动安装
另外,您还可以直接进入WinGet官方GitHub仓库,在Release页面手动下载WinGet安装程序进行手动安装。
从 WinGet 的 GitHub Release 页面手动下载并安装
熟悉WinGet操作和命令
安装WinGet后,我们可以在PowerShell或CMD中使用winget命令来调用它。
WinGet:微软官方开发的Windows包管理工具
直接运行winget命令,WinGet会向我们展示它的一些基本操作et软件教程,包括安装软件、显示软件信息、显示应用程序源、搜索软件、验证安装程序等。 日常使用Windows时,我经常使用Scoop进行软件安装和管理。 这里我将WinGet和Scoop面对面对比一下命令,看看几个常用的功能(安装软件、显示信息、搜索软件)。 WinGet 和 Scoop 之间的区别。
安装软件
大家安装软件的方式都是一样的,都是winget install {软件名称}和scoop install {软件名称}。 例如,这里我使用WinGet和Scoop来下载并安装Postman:
# 使用 WinGet 安装一遍
winget install postman
# 卸载,再用 Scoop 安装一遍
scoop install postman
使用WinGet和Scoop下载并安装Postman
安装过程可能类似。 WinGet 安装 exe 文件,而 Scoop 安装 NuGet 的 .nupkg 文件。 两者都是Windows上常见的软件安装文件。 界面上,WinGet的下载进度条很酷,而Scoop仍然使用“字符进度条”,简单而诚实。
另外,WinGet还有一个相当酷的进度条。 只需在安装命令后添加--rainbow参数即可解锁彩虹进度条! (这些你有吗?(/▽\))
使用WinGet下载安装程序的彩虹进度条以及整个下载过程
显示软件详细信息
同样,WinGet和Scoop都支持显示某个软件的详细信息。 这里,WinGet使用的命令是:
winget show postman
Scoop对应的命令是:
scoop info postman
显示要安装的软件的详细信息
两者都显示了当前要安装的软件的版本信息、官网、原始地址、下载链接等信息,比较相似。
搜索特定软件
WinGet和Scoop也支持搜索某个软件。 使用相同的搜索{软件名称}命令。 例如,搜索Steam:
# WinGet 搜索 Steam
winget search steam
# Scoop 搜索 Steam
scoop search steam
WinGet 和 Scoop 搜索特定软件
当然,WinGet和Scoop都是关键字匹配搜索。 由于Scoop目前拥有比较丰富的软件库,因此它可以搜索到的东西比WinGet更多。 另外,我发现WinGet的搜索速度比Scoop要快。 这可能是因为Scoop需要连接网络才能遍历整个软件桶,所以搜索速度没有那么快。
除了上面介绍的三个命令外,WinGet还有方便WinGet软件源码开发和管理人员的validate命令、hash命令等。
WinGet安装管理软件原理
WinGet目前仍处于预览阶段,使用Manifest文件来管理和安装不同的软件。 这个设计理念与Scoop高度相似。 为了让您彻底理解这个过程,我们首先具体介绍一下WinGet、Scoop等Windows包管理工具在软件安装过程中是如何工作的。
WinGet是一个典型的“基于Windows”的包管理工具。 由于Windows本身的设计,软件安装几乎总是伴随着“软件安装程序”的使用。 因此,WinGet等“包管理工具”,包括Scoop,实际上取代了我们:
像 WinGet 这样的包管理器如何知道在哪里查找软件、下载并安装它? 答案是读取软件对应的Manifest文件。
WinGet 安装软件的工作原理
就像图中描述的流程一样,在安装软件时,WinGet和Scoop首先去各自维护的软件Manifest库中查找对应的软件安装Manifest文件。 这个文件就像一个使用说明书,指导软件包管理工具的安装。 软件的具体流程。 WinGet、Scoop等Windows包管理工具会根据软件对应的Manifest文件进行准备、下载、安装和清理。
可以发现,这个过程中最重要的一步就是找到“软件清单库”,并请求要安装的软件对应的“清单文件”。 对于WinGet,微软目前在GitHub上维护着一个开源的microsoft/winget-pkgs仓库,用于让WinGet找到该软件对应的manifest文件。
GitHub 上的 Postman 软件清单文件
相应地,Scoop通过桶机制来实现这一功能。 在上一篇文章《将这些软件存储库添加到Scoop中,使其成为功能强大的Windows软件管理器》中,我介绍了Scoop的不同软件存储库、如何添加自定义软件存储库以及如何从第三方软件存储库下载软件。 下载、安装软件等,在WinGet中,我们也有相应的方法。
WinGet 提供了源命令。 使用winget source,我们可以方便地管理不同的WinGet软件Manifest仓库(WinGet官方称为“软件源”)et软件教程,例如:
当然,由于 WinGet 才出现几天,除了官方存储库之外,没有可用的软件存储库。
概括
在我看来,WinGet 和 Windows Terminal 一样,是 Windows 团队为让 Windows 系统更加“开发者友好”而做出的又一努力。 不过,WinGet现在实际上还只是一个半成品。 它的半成品最重要的一点就是只支持安装软件,不支持卸载软件。
同时,WinGet也没有逃脱Windows包管理工具的通病——“软件安装程序”并不是真正意义上的“软件包管理工具”。 目前WinGet只是一个与Chocolatey、Scoop等Windows包管理工具原理相同的工具,都是社区的优秀作品,并没有因为微软本身的加入而有什么新花样。
希望随着未来的不断迭代,WinGet能够成为真正的“Windows包管理工具”,而不是为了重新发明轮子而重新发明轮子,让开发者朋友们像看Windows终端一样大喊“真好吃”。 谢谢阅读。