包管理器 WinGet Chocolatey Scoop
目录
windows 的包管理器
包管理工具,是电脑中自动安装、配置、卸载和升级软件包的工具。基于命令行的包管理工具已经在 *NIX
世界中被广泛使用,不论是 macOS 的 Homebrew
,还是 Linux 各大发行版自己的包管理(APT
、Yum
、Pacman
……),它们都不仅有着完善的使用机制,还有丰富的软件包生态,是 *NIX
系统安装、管理软件包的不二之选。
Windows 在「包管理工具」方面则一直乏善可陈。社区的努力让 Windows 有了 Chocolatey
以及 Scoop
,Windows 自己在历史上也曾经推出过具有「包管理工具」类似功能的 OneGet
和 NuGet
。但是前二者一直依赖社区维护者
的用爱发电,后二者则更强调开发环境
的软件安装,没有提供日常用户所使用的软件,都不尽完美。
WinGet
简介
WinGet 是 Microsoft 在 2020 年发布的、面向广大 Windows 普通用户的 Windows 官方包管理工具
,有了 WinGet,Windows 普通用户终于可以通过官方途径在命令行环境下管理软件了。
winget 工具需要 Windows 10 版本 1809 (10.0.17763) 或更高版本的 Windows 10。
可以去 WinGet 的官方 GitHub 仓库的 Release 页面 手动下载 xxx.msixbundle
并安装。
WinGet 和 Chocolatey
、Scoop
等 Windows 包管理工具相比,实现原理基本一致,并没有因为微软自己的加入而有新的花样,也没有逃脱 Windows 类包管理工具的通病 —— 「软件安装器」并非真正意义上的「软件包管理工具」。
winget install "360 安全卫士"
正在添加依赖:360 浏览器
正在添加依赖:360 杀毒
正在添加依赖:360 手机助手
常用命令
winget # 显示帮助文档,同【winget -?】或【winget --help】
winget xxx -? # 显示指定命令的帮助文档
winget settings # 使用默认文本编辑器打开配置文件
winget list > list.txt # 导出系统上已安装的应用(包括不是通过winget安装的应用)
winget list Tencent # 筛选与指定内容匹配(名称、id、tags、描述、作者...)的应用
winget list --name QQ # 筛选名称与指定内容匹配的应用
winget list --id Tencent # 筛选 id 中包含指定内容的应用(不区分大小写)
winget show 腾讯QQ # 显示与指定内容匹配的应用的详细信息
winget show "Android Studio" # 带空格时必须用引号包起来
winget show 腾讯QQ --versions # 显示应用程序的所有可用版本
winget export -o apps.json # 以JSON格式导出已安装的应用(仅包含源中能匹配的应用)
winget import -i apps.json # 批量安装通过export导出的应用(安装的是最新版本)
winget search Tencent # 搜索与指定内容匹配的应用
winget search --id Tencent # 搜索 id 中包含指定内容的应用
winget search Tencent -s winget -e # 在指定源中、使用确切的字符串(区分大小写)搜索匹配的应用
winget install 腾讯QQ # 安装与指定内容匹配的应用,仅当匹配应用唯一的时候才可以安装
winget install --id Tencent.QQMusic # 安装指定 id 应用的最新版本(id必须是完全一致的)
winget install --id xxx --version yyy # 安装指定 id 应用的特定版本
winget upgrade xxx --version yyy # 将与指定内容匹配的应用(建议使用--id精准匹配)升级到特定版本
winget upgrade --all # 升级所有应用到最新版本
winget uninstall --id xxx # 卸载指定 id 的应用(不是通过winget安装的应用也可以卸载)
winget source list # 列出已启用的软件源(winget、msstore)
winget source list --name winget # 获取源的完整详细信息
winget source update # 检查更新,还有add、remove、reset、expor等子命令
实现原理
WinGet 是典型的「Windows 思路」包管理工具,由于 Windows 本身的设计,软件的安装几乎都伴随着软件安装器的使用。因此,WinGet 一类包管理工具,包括 Scoop 在内,实际上都是代替我们:
寻找
软件官方发布地址下载
我们设定版本的软件运行
软件安装器来安装下载得到的软件- 最后进行环境上的准备、安装后的善后工作等
WinGet 是通过读取软件对应的 Manifest 清单文件,才知道去哪里寻找软件、在哪下载软件和如何安装软件的。
WinGet 和 Scoop 在安装软件过程,都是先去各自维护的软件 Manifest 库,寻找相应的软件安装 Manifest 清单文件,这一文件就像说明书一样指导软件包管理工具安装软件的具体过程。WinGet 和 Scoop 等 Windows 包管理工具就会依据软件相应的 Manifest 文件:准备、下载、安装、善后。
可以发现,在这一过程中,最为重要的一步就是找到「软件 Manifest 库」,并从中请求得到待安装软件相应的「Manifest 文件」。对于 WinGet 来说,微软官方目前维护了一个在 GitHub 上面开源的 microsoft/winget-pkgs 仓库,用于让 WinGet 来寻找软件相应的 Manifest 文件。
Chocolatey
Chocolatey 是一款专为 Windows 系统开发的、基于 NuGet
的包管理器工具
,类似于 Node.js 的 npm
,MacOS 的 brew
,Ubuntu 的 apt-get
。Chocolatey 的设计目标是成为一个去中心化的框架,便于开发者按需快速安装应用程序和工具。
安装
- 右键左下角的开始图标,选择以管理员身份运行 powershell.exe (使用 cmd 不行)
- 运行
Get-ExecutionPolicy
,如果返回Restricted
,则运行Set-ExecutionPolicy AllSigned
- 完成后,会被安装在
C:\Users\白乾涛\AppData\Local\Temp\chocolatey\chocoInstall
目录 - 输入
choco -v
会打印当前安装的版本 - 安装后会创建系统变量
ChocolateyInstall
,值默认为C:\ProgramData\chocolatey
,此值即为 install 默认安装位置 - 会自动把
C:\ProgramData\chocolatey\bin
添加到Path
中
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 -v # 当前安装的版本
choco -h # 显示帮助
choco list -help # 显示某一命令的帮助
choco list -li # 列出系统已安装的软件(包括未通过choco安装的包)
choco list -lo # 列出本地已安装的包(仅包括通过choco安装的包)
choco search pkgName # 搜索包
choco install pkgName # 安装包
choco install --yes pkgName # 安装过程自动同意
choco uninstall pkgName # 卸载包
choco upgrade pkgName # 升级包
choco upgrade --yes all # 一键升级所有包
choco outdated # 检查哪些应用需要更新
choco info pkgName # 查看程序的详细信息
命令大全
- help - displays top level help information for choco
- search - searches remote or local packages (alias for list)
- find - searches remote or local packages (alias for search)
- list - lists remote or local packages
- info - retrieves 检索 package information
- install - installs packages from various sources
- pin - suppress 压制/禁止 upgrades for a package
- outdated - retrieves packages that are outdated 过时
- upgrade - upgrades packages from various sources
- uninstall - uninstalls a package
- pack - packages nuspec, scripts, and other Chocolatey package resources into a nupkg file
- push - pushes a compiled nupkg to a source
- new - generates files necessary for a chocolatey package from a template
- source - view and configure default sources
- sources - view and configure default sources (alias for source)
- config - Retrieve and configure config file settings
- feature - view and configure choco features
- features - view and configure choco features (alias for feature)
- setapikey - retrieves, saves or deletes an apikey for a particular source (alias for apikey)
- apikey - retrieves, saves or deletes an apikey for a particular source
- unpackself - re-installs Chocolatey base files
- version - [DEPRECATED]
- update - [DEPRECATED]
- support - provides support information
- export - exports list of currently installed packages
- download - downloads packages - optionally internalizing all remote resources
- synchronize - synchronizes against system installed software - generates missing packages
- sync - synchronizes against system installed software - generates missing packages
- optimize - optimizes installation, reducing space usage
Scoop
Scoop is a command-line installer for Windows.
安装与设置
# 为当前帐户启用 PowerShell
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# 更改Scoop默认安装路径(默认路径为 C:\Users\白乾涛\scoop),User 表示用户变量,Machine 表示系统变量
[Environment]::SetEnvironmentVariable('SCOOP','C:\_dev\_Tools\Scoop\scoop','User')
# 更改应用安装路径,必须用管理员权限才能用 Machine,没权限的话可以自己手动去设置环境变量
[Environment]::SetEnvironmentVariable('SCOOP_GLOBAL','C:\_dev\_Tools\Scoop\scoop_global','Machine')
# 使用 PowerShell 安装 Scoop(需要FQ才能下载,否则很可能报异常)
Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh')
# 安装推荐的下载工具 aria2
scoop install aria2
常用命令
scoop help # 显示帮助文档
scoop help xxx # 显示指定命令的帮助文档
scoop list # 已安装列表(仅包括通过scoop安装的应用)
scoop search xxx # 搜索应用
scoop info xxx # 查看应用的详细配置
scoop install xxx # 安装在 \scoop\apps 目录
scoop install xxx -g # 安装在 \scoop_global\apps 目录
scoop bucket known # 列出 Scoop 可以直接识别并添加的 bucket
scoop bucket rm extras # 移除软件库
scoop bucket add extras # 添加软件库,可能需要加上仓库地址
scoop bucket add extras https://github.com/lukesampson/scoop-extras.git # 添加软件库
App Manifests
An app manifest is a JSON file that describes how to install a program.
Scoop 会将仓库缓存至本地,当安装软件时,Scoop 就从本地仓库中查找
出我们想要安装的软件的 Manifests 配置文件
,并依照这个配置文件进行软件的安装工作,包括:
- 从哪里下载软件
- 如何安装软件、安装到哪里、需要修改更新什么环境变量
- 安装之前、之后都要做什么准备(善后)工作
我们可以通过scoop info
查看应用的基本信息,其中 Manifest
的值就是此应用本地 Manifests 配置文件
的存放路径:
λ scoop info aria2
Name: aria2
Description: Lightweight multi-protocol & multi-source command-line download utility
Version: 1.36.0-1
Website: https://aria2.github.io/
License: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later.html)
Manifest: C:\_dev\_Tools\Scoop\scoop\buckets\main\bucket\aria2.json
Installed: C:\_dev\_Tools\Scoop\scoop_global\apps\aria2\1.36.0-1 *global*
Binaries: aria2c.exe
Manifests 配置文件
中具体存储的配置项,可以查阅 App Manifests 文档。
软件仓库 bucket
bucket 简介
In Scoop, buckets are collections of apps
. Or, to be more specific 更具体地说, a bucket is a Git repository
containing JSON app manifests which describe how to install an app.
Scoop has a main bucket which is bundled 捆绑 with Scoop and this is always available as the primary 主要 source for installing apps.
By default, when you run scoop install <app>
, it looks in the main bucket
, but it's possible to install from other buckets too.
There's an optional extras bucket containing apps that don't quite fit the criteria of the main bucket, but are still good to have.
There is also an optional versions bucket containing older versions of some well-known packages 知名软件包的旧版本.
main bucket 的收录标准
Scoop 默认的软件仓库是 main
bucket,由于 Scoop 的设计初衷是为了方便 Windows 开发者安装和配置开发工具,所以其默认软件仓库的收录条件很苛刻
。
- a reasonably well-known and widely used
developer tool
,是主流的开发者工具 - the latest stable version of the program,程序的最新稳定版本
- the full version i.e. not a trial version,是完整版本而不是能 Trial 版本(试验版本)
- a fairly standard install,相当标准的安装,不可以有复杂的安装前与安装后处理步骤
- a
non-GU
I tool,不可以有 GUI,这一点直接否决了一系列面向普通用户软件的收录
已知的 bucket
There is a list of known buckets
by the community, those can be seen in buckets.json, 也可以执行scoop bucket known
命令查看:
- main - Default bucket for the most common (mostly CLI) apps
- extras - Scoop 官方维护,涵盖了大部分不符合 main bucket 收录条件的常用软件
- versions - Alternative versions of apps found in other buckets
- games - Open source/freeware games and game-related tools
- nerd-fonts - Nerd Fonts
- nirsoft - A subset of the 250 Nirsoft apps
- java - Installers for Oracle Java, OpenJDK, Zulu, ojdkbuild, AdoptOpenJDK, Amazon Corretto, BellSoft Liberica & SapMachine
- jetbrains - Installers for all JetBrains utilities and IDEs
- nonportable - Non-portable apps (may require UAC)
- php - Installers for most versions of PHP
2018-04-20
本文来自博客园,作者:白乾涛,转载请注明原文链接:https://www.cnblogs.com/baiqiantao/p/8891301.html