首先官網列出幾點建議那些人可以試試看 Scoop 。
簡而言之, Scoop 、 Chocolatey 或 WinGet 這類工具可以讓你像是使用 Homebrew 或 apt-get 一樣在 Windows 上管理安裝的軟體。在建立新的開發環境時,不需要四處下載每個軟體的安裝檔。維護舊環境可以清楚知道那些軟體需要更新。
不同於 Chocolatey , Scoop 預設安裝位置在 home 目錄,所以安裝軟體時不會有討人厭的 UAC 。另外一個優點就是 Scoop 對環境變數的管理,可以方便開發者快速切換軟體版本。
在 PowerShell 執行以下兩則命令就能安裝
> Set-ExecutionPolicy RemoteSigned -scope CurrentUser > iwr -useb get.scoop.sh | iex
Scoop 原理是透過這些社群維護稱做 bucket 的 JSON 檔案,裡頭會包含每個軟體安裝時會需要從哪裡下載安裝檔,以及在安裝、移除時會需要執行的動作。
例如預設的 main 多蒐集常用開發工具且不含 GUI 的軟體,例如 Python 、 R 、 Git 、 7Zip 、 Ant 、 Maven 等等。可以在每個 JSON 檔案中檢查下載的來源、版本及雜湊值,例如 Maven 。
執行 scoop bucket known
看到官方維護的其他 bucket ,可以使用 scoop bucket add
可以加入搜尋範圍。
例如今天需要安裝 Python ,可以透過 scoop search python
指令來搜尋各個 bucket 名稱或執行檔有 python
的所有項目。接著使用 scoop install python
就會安裝在 main bucket 的 Python 3.9.5 了。
> scoop search python 'extras' bucket: anaconda3 (2020.11) --> includes 'python.exe' miniconda3 (4.9.2) --> includes 'python.exe' 'main' bucket: python (3.9.5) winpython (3.8.9.0) 'versions' bucket: anaconda2 (2019.10) --> includes 'python.exe' miniconda2 (4.8.3) --> includes 'python.exe' python-alpha (3.10.0b1) python-beta (3.8.6rc1) python27-beta (2.7.18rc1) python27 (2.7.18) ...
預設所有軟體會安裝在 ~/scoop
中,除非單獨的軟體有特殊需求,否則 Scoop 會透過 ~/scoop/shims
中管理執行檔,所以使用者環境變數只需要有這條路徑。
Scoop 對於環境變數的管理帶來一個很方便的功能,就是能方便快速的切換同一軟體的不同版本。以下圖舉例,安裝 JDK 8 、11 兩個版本之後,當要在兩個版本之間切換時只需要使用 scoop reset
就能管理開發環境使用的 Java 版本而不需要重頭安裝。
> java -version openjdk version "1.8.0_262" > scoop reset adopt11-openj9 Resetting adopt11-openj9 (11.0.8-10-0.21.0). Linking ~\scoop\apps\adopt11-openj9\current => ~\scoop\apps\adopt11-openj9\11.0.8-10-0.21.0 > java -version openjdk version "11.0.8" 2020-07-14
所有安裝的軟體預設放在 ~/scoop/apps
中,每個版本會獨立一個目錄並把最新的版本 link 到 current
路徑。所以要小心某些軟體會將資料儲存在安裝目錄中,例如 Firefox 。當使用 scoop update
更新時新版本會安裝在新的目錄,如果不小心執行 scoop cleanup
將舊版本移除會連帶讓資料遺失。
Scoop 能幫助習慣 CLI 工具的開發者建立工作環境,目前 main 和 extra 兩個 bucket 已經包含大多數常見的工具,以下舉幾個很實用或很酷的例子