Windows 也有包管理工具?

2022-01-02 逛逛GitHub
對於開發者來說,一款好用的軟體包管理工具可以大大提高安裝、部署、管理軟體的效率。在 Win 環境下,我們手動安裝一款軟體的流程是:之前只有 MacOS 和 Linux 官方才有軟體包管理工具,其實微軟官方也為 Windows 系統發布了一款名為 Winget 的軟體包管理工具。雖然在 Windows 平臺已經有 scoop 和 chocolately 這樣的包管理工具,但畢竟 WinGet 是微軟親兒子,而且在不斷更新中。現在 Winget 還處於開發預覽階段,項目託管在 GitHub 上。同時,微軟還在 GitHub 上維護著 winget-pkgs 倉庫。winget-pkgs 和 WinGet 的關係是:WinGet 需要使用軟體源 Manifest 來管理和安裝軟體,通過讀取對應的 Manifest 清單來尋找軟體,然後才能下載和安裝軟體,而 winget-pkgs 就是維護 Manifest 清單的 Repo。比如我想安裝 Postman, WinGet 就會做如下事情:正在添加依賴:360瀏覽器 正在添加依賴:360殺毒 法1:提交 WinGet 的預覽體驗申請,Win10 商店下載法2:申請加入 Windows Insider,Win10 商店下載推薦法3,簡單直接, 在 GitHub 搜索 WinGet,microsoft/winget-cli 就是該項目。在 releases 頁面下載名為 Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.appxbundle 的軟體安裝包。安裝 應用安裝程序 後,可以通過在命令提示符下鍵入 「winget」 來運行 WinGet 。最常見的使用場景之一是搜索並安裝你最喜歡的工具。若要搜索某個工具,請鍵入 winget search \<appname>確認你需要的工具可用後,可以通過鍵入 winget install \<appname> 來安裝該工具。 WinGet 工具會啟動安裝程序,將應用程式安裝在你的電腦上。比如搜索並安裝我們前一陣介紹的 PowerToys:

除了安裝和搜索外, WinGet 還提供了許多其他命令,用來 顯示應用程式詳細信息, 更改源以及 驗證程序包。若要獲取完整的命令列表,請鍵入 winget --help

命令添加、刪除和更新 winget 工具訪問的 Windows 程序包管理器存儲庫。驗證要提交到 Windows 程序包管理器存儲庫的清單文件。選項info 提供有關 winget 的所有詳細信息,包括許可證和隱私聲明的連結。彩(虹)蛋安裝命令後加 --rainbow,可以看到彩虹進度條,是不是很騷 當然你可以通過winget settings將彩虹進度條設置為默認,就不用打--rainbow了winget 工具的當前預覽版支持以下類型的安裝程序編寫 winget 腳本可以編寫批處理腳本和 powershell 腳本來安裝多個應用程式。

@echo off
Echo Install Powertoys and Terminal
REM Powertoys
winget install Microsoft.Powertoys
if %ERRORLEVEL% EQU 0 Echo Powertoys installed successfully.
REM Terminal
winget install Microsoft.WindowsTerminal
if %ERRORLEVEL% EQU 0 Echo Terminal installed successfully. %ERRORLEVEL%

註:使用腳本時, WinGet 會按指定順序啟動應用程式。當安裝程序返回成功或失敗時, WinGet 會啟動下一個安裝程序。如果某個安裝程序啟動了另一進程,它可能會提前返回到 WinGet 。這會導致 WinGet 在上一個安裝程序完成之前安裝下一個安裝程序。如果官方源未包含你的工具或應用程式, 你可以將程序包提交到官方的存儲庫。添加你最喜愛的工具後,你和其他人都可以使用它。官方存儲庫,也就是官方源的地址:https://github.com/microsoft/winget-pkgs官方歡迎你提交自己編寫的 manifest,以解壓軟體7Zip為例,manifest長這樣:它包含了下載地址,Sha256校驗碼等關鍵信息:

Id: 7zip.7zip
Name: 7Zip
AppMoniker: 7zip
Version: 19.0.0
Publisher: 7zip
Author: 7zip
License: Copyright (C) 1999-2020 Igor Pavlov. - GNU LGPL
LicenseUrl: https://7-zip.org/license.txt
MinOSVersion: 10.0.0.0
Homepage: https://www.7-zip.org/
Description: Free and open source file archiver with a high compression ratio.
Tags: "7zip,compression,file compression,utility,tool,zip"
InstallerType: msi
Installers:
  - Arch: x64
    Url: https://www.7-zip.org/a/7z1900-x64.msi
    Sha256: A7803233EEDB6A4B59B3024CCF9292A6FFFB94507DC998AA67C5B745D197A5DC
    Switches:
      Silent: /quiet /norestart
      SilentWithProgress: /passive /norestart

輸入:winget features,會給出所有 WinGet 上的實驗功能,顯示如下:默認狀態下,實驗性功能是禁用狀態,WinGet 提示我們打開 settings(輸入 WinGet settings 即可), 類似於 vscode,WinGet 的設置也通過 json 來進行配置其中,對於自動補全功能,需要額外對 Powershell 進行如下配置:首先給Powershell創建一個$profile$profile主要用於個性化常用的函數、別名等等。每次加載powershell的時候,都會執行profile中的內容。

New-Item –Path $Profile –Type File –Force

Register-ArgumentCompleter -Native -CommandName winget -ScriptBlock {
  param($wordToComplete, $commandAst, $cursorPosition)
      [Console]::InputEncoding = [Console]::OutputEncoding = $OutputEncoding = [System.Text.Utf8Encoding]::new()
      $Local:word = $wordToComplete.Replace('"', '""')
      $Local:ast = $commandAst.ToString().Replace('"', '""')
      winget complete --word="$Local:word" --commandline "$Local:ast" --position $cursorPosition | ForEach-Object {
          [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
      }
}




install is the first command below the rootshow is the first command that starts with shlist is the first sub-command of source that starts with l--version is the first argument defined for the rootwinget install "Power Toys""Power Toys" is the first package whose Id, Name, or Moniker starts with powerwinget install "Power Toys" --version ⇥winget install "Power Toys" --version 0.19.20.19.2 is the highest version of Power Toys at the time of writing其它功能就不需要額外配置 powershell 了,只需要在 settings 設置完成即可:比如我想開啟list功能,自動補全功能,進行如下的設置:我們配置完 settings 文件後,再輸入 winget features 來查看實驗性功能的開啟情況:你可能注意到,甚至 list 命令和 upgrade 命令都是實驗性功能,可見其不夠完善。目前比較操蛋的是 WinGet 竟然還沒有卸載功能,老逛測試時該項目已經發布半年多了。
後來老逛發現了它的官方路線圖,原來到 2021 年 5 月份,我們才能得到一個基本可用的 1.0 版本。

上文提到,之前在 Windows 平臺上,已經有了兩個不錯的包管理工具:Chocolatey 以及 Scoop,Chocolatey 的自我定位是 Windows 系統的軟體管理自動化。它能夠在無需人工幹預的情況下自動安裝超過 20 種 Windows 軟體包類型,而且開箱即用,支持配置超過 7000 款主流軟體,包括 Google Chrome 和 VLC 多媒體播放器等桌面熱門應用程式。

Scoop 同樣可以通過單命令安裝 Windows 軟體,不過它的適用目標相對來說更狹窄,也更有針對性。這款軟體包管理工具更多的時候是幫助開發者安裝系統工具時使用,尤其是那些依賴於 Linux 但在 Windows 系統上不存在的軟體程序。

兩款軟體包安裝程序都有各自的優缺點,所以需要根據自己的需求進行選擇。如果想快速簡單地安裝熟悉的 Windows 程序,那麼 Chocolatey 可能適合你。

其廣泛的社區驅動的軟體包存儲庫意味著無需額外配置的情況下,你就可以找到幾乎所有流行的 Windows 程序。

這兩個成熟的工具都比 WinGet 要完善,在現階段,如果你想在 Windows 上體驗包管理工具,老逛建議還是 scoop+chocolately 吧。

因為今天這篇文章是介紹 WinGet,推薦兩篇文章介紹這兩個工具,我就不多贅述了。

Scoop:  https://sspai.com/post/52496

Chocolately: https://sspai.com/post/55309

WinGet 於 5 月 29 在微軟的 Build 2020 上發布,歷時大半年 ,老逛在 2020 年末體驗了一遍 WinGet,甚至沒有卸載功能。目前功能還非常有限,畢竟還處於預覽體驗階段,但是因為它有官方 buff 的加持,我還是希望它越來越好,甚至希望有天它能像 Linux子系統(WSL)一樣集成到官方系統中,給 Windows 平臺的用戶帶來穩定易用的體驗。‍‍‍‍‍我覺得我們還是要寬容吧,準官方的 Windows 包管理工具在不斷進化中,如果你喜歡開源項目,並且希望推動 WinGet 的發展,可以使用 WinGet 並在官方 Github 提出issue,開源社區萬歲!
比如,剛提到的 list (列出已安裝軟體)及 upgrade (升級軟體)的功能,也是開發人員回復並落實了用戶提出的 issue。
[1] https://sspai.com/post/60592 作者:SpencerWoo[2] https://sspai.com/post/60597 作者:stevapple[3] https://docs.microsoft.com/zh-cn/windows/package-manager/[4] https://github.com/microsoft/winget-cli

0. 逛逛GitHub交流群限時加入

1. IntelliJ IDEA 從入門到上癮!

2. 手機抓包!

3. 幹掉馬賽克!

4. GitHub 暗黑模式終於來了!

相關焦點

  • 小白都能看懂的go語言包管理工具"DEP"詳解
    簡介眾所周知GO語言包管理工具百花齊放,前有godep、glide、govendor,後有dep。
  • [Windows] 聯想工程師電腦故障專用小工具包
    >聯想工程師電腦故障專用小工具包首先這不是我自己原創的,只是覺得有用轉給需要的小夥伴們。V1.67.1.exewindows 系統密碼修改工具V2.27.1.exewindows小工具V3.09.1.exeWindows文件和文件夾問題修復工具V1.87.1.exewindows無法更新,應用商店無法打開修復工具V2.40.1.exewindows更新修復工具V1.69.1.exewindows
  • 包管理工具yarn
    yarn是facebook發布的一款取代npm的資源包管理工具,是一個快速、可靠、安全的依賴管理工具,一款新的node資源包管理工具。
  • Python包管理工具pip使用方法
    安裝完Python,首先接觸的是包管理工具pip。
  • NodeJS包管理工具——npm入門
    起初,NodeJS主要是設計為做服務端程序開發的,但慢慢的,開發者們把它應用於構建本地自動化工具鏈。自此開放出了一片新的NodeJS生態環境(例如Grunt和Gulp),讓新一代的前端開發者們逐漸形成了工程化的思想。為了利用好這些工具(或者包),我們需要以一種良好的方式去安裝和管理它們(就像Windows的添加刪除程序一樣)。
  • Windows軟體包管理工具:Scoop
    以前想過這個問題,最近在安裝 Hugo 時發現使用軟體包管理工具可以解決這個問題。閱讀建議首先需要測試下載速度,嘗試從官網下載,如Node.js[1]或Git[2],如果下載速度非常慢,那麼軟體包管理工具也是一樣的速度。
  • Go 包依賴管理工具 —— govendor
    govendor 是一個基於 vendor 機制實現的 Go 包依賴管理命令行工具。
  • Windows 10環境下安裝Python科學計算工具包之Anaconda
    並支持多種系統如windows,linux,mac,此外Anaconda最棒的一個特性就是使用conda來致力於簡化包的管理和部署與pip命令的功能類似但更加強大。最新版本包的下載地址:https://www.anaconda.com/download/#windows`歷史其他版本的下載地址:https://repo.continuum.io/archive/`Anaconda安裝這裡介紹的是在windows的安裝,第二步我們下載好了
  • Python pip 包管理工具
    Python 的包管理工具叫 pip (Python Install Packages),所有的 Python 安裝包都在 PyPi 網站上,PyPi
  • 安裝 pip 輕鬆管理 PyPI 軟體包 | Linux 中國
    Python 是一種功能強大、流行廣泛的程式語言,在常規編程、數據科學等很多方面它都有豐富的軟體包可供使用。但這些軟體包通常都不會在 Python 安裝時自動附帶,而是需要由用戶自行下載、安裝和管理。所有的這些軟體包(包括庫和框架)都存放在一個名叫 PyPI(也就是 Python 軟體包索引Python Package Index)的中央存儲庫當中,而 pip(也就是首選安裝程序Preferred Installer Program)則是管理這個中央存儲庫的工具。在安裝 pip 之後,管理 PyPI 的軟體包就變得很方便了。
  • macOS 包管理工具 Homebrew 不完全指南
    說到包管理工具,幾乎已經成為現代作業系統或者開發平臺不可或缺的工具軟體。
  • Dism++,一款超強Windows實用工具
    首先Dism++是由初雨團隊採用微軟內部API編寫的一款開源免費的實用工具,最初的名字叫windows更新清理工具。Dism++可以說是一個Dism的GUI版,但是並不依賴Dism,直接基於更底層的CBS(Component Based Servicing Reference)。
  • Helm:強大的Kubernetes包管理工具
    用戶通過使用Kubernetes API對象來描述應用程式規格,包括Pod,Service,Volume,Namespace,ReplicaSet,Deployment,Job等等。一般這些對象需要寫入一系列的Yaml文件中,然後通過Kubernetes命令行工具Kubectl進行部署。
  • 使用conda管理python包
    作為一款管理python安裝包的包管理器,其功能要比python自帶的pip強大不少。安裝好anaconda時會默認安裝conda,以及一些python安裝包。然後可以根據個人需要,使用conda安裝其餘的第三方包,conda會自動解決包之間的依賴關係。在安裝第三方包時,由於網絡連接原因,連接默認源的速度會很慢,有時會出現連接中斷,甚至無法連接的情況。
  • 源自Babel的多包管理工具:Lerna
    被依賴的模塊版本升級,模塊其他版本需要手動管理相關的版本。有循環依賴的風險對於多個模塊的大型項目的協作管理,一般地有multirepo、monorepo和submodules等多種方式:multirepo是將多個模塊分別分為多個倉庫,早期的Babel(Babel6以前)使用的就是這種方式;submodules是藉助git的實現,在.gitmodules中寫明引用的倉庫,在主倉庫中只保留必要的索引;monorepo則是將相關的模塊用單一的倉庫統一管理
  • 使用 Windows 10 的 RSAT 工具來管理 Samba4 活動目錄架構 (三)
    上面所有的功能和其它一些複雜的與域管理相關的工作都可以通過 Windows 環境下的 RSAT 工具來完成—— Microsoft 遠程伺服器管理工具。第三步:把 Windows 10 系統加入域環境9、從我們的前一篇文章可以看出,Samba4 活動目錄可以使用 samba-tool 工具在命令行下管理[6],可以直接在伺服器上的 VTY 控制臺或者通過 SSH 工具遠程連接到伺服器上進行管理。
  • Pipenv:官方推薦的python包管理工具
    Pipenv - 官方推薦的的python包管理工具。Pipenv是一款旨在將所有包管理工具(如bundler, composer, npm, cargo, yarn等)的優點集中應用於python領域中的工具。它對各個平臺都有很好的支持。
  • 開個網頁就能管理windows server?微軟強烈推薦的好工具來了
    Windows Admin Center來管理伺服器,在之前的windows server版本中,是沒有這個提示的,看來微軟是想要用Windows Admin Center來替代傳統的伺服器管理器了啊。
  • 微軟給WSL加入GPU支持,Windows終於迎來命令行包管理工具
    WSL將支持GPU假設您在Windows主機上安裝了正確的GPU驅動程序,將可用於任何已安裝的WSL發行版(Ubuntu、Fedora、openSUSE),而無需安裝任何其他軟體包。為了實現WSL 2對GPU的支持,WDDMv2.9驅動程序將把GPU-PV擴展到Linux端。
  • 所有windows用戶,都應該有這樣的系統管理工具
    ❤❤❤點藍字關注⬆️今天給大家推薦一款windows平臺的系統管理工具,可以說非常良心,體驗極佳。