Please enable Javascript to view the contents

Windows下的包管理器Scoop(永远的开发利器)

 ·  ☕ 10 分钟  ·  ✍️ Calvin Haynes · 👀... 阅读

前言

package manager,即包管理器,这里的包可以理解成广义上的软件,不仅包含常见的基于图形用户界面(GUI)的软件,还包含基于命令行界面(CLI)的开发工具。所以其实包管理器就是一个软件自动化管理工具,他将软件的安装,配置,更新,删除统一化了,能带给用户优雅的使用体验,Apple 系列产品的 APP Store 其实就是基于这个优雅理念的一个最佳实践,同样在 Linux 系统我们也有 yum,apt 等优秀的包管理器,但在 Windows 系统上,大部分人还是熟悉从各种第三方五花八门的渠道下载 exe 安装包安装的过程,不仅不能保证渠道的安全性,安装流程也很复杂,于是澳洲程序员 Luke Sampson 在 2015 年创建了可以用于 Windows 系统的 Scoop 包管理器。

当然,Windows 也有众多其他的包管理器,比如 Chocolatey,Winget ,但是 Scoop 官方仓库的维护包括社区用户的贡献都要强于这二者,Scoop 以自定义程度高和扩展性强著称,任何用户都可以建造自己的软件仓库(Bucket)并发布到社区供大家使用,通过一些简单的脚本配置就可以加入一些第三方软件,从而其他用户可以将这个仓库通过命令添加到本地,然后再通过命令安装一些官方库没有的第三方软件,这一切都是优雅且统一的,所以我十分建议每个 Windows 用户尤其是需要安装各种开发环境比如 JDK,Python 等等的开发者使用 Scoop 进行软件的管理(每个开发者应该都知道重装 Windows 系统之后重新配开发环境的痛苦吧呜呜)。

Without further ado,Let‘s get our hands dirty!

1-Scoop 安装

1-Scoop 安装配置要求

  • Windows 版本不低于 Windows 7
  • PowerShell 版本 >= 5.0 (如果是 Window 10 则默认满足此条件)
  • 你能 正常、快速 的访问 GitHub 并下载上面的资源(科学上网)
  • 你的 Windows 用户名为英文(Windows 用户环境变量中路径值不支持中文字符)

2-Scoop 安装步骤

1- WIn+S 搜索并打开 Powershell

image.png

2-在 PowerShell 中打开远程权限

1
Set-ExecutionPolicy RemoteSigned -scope CurrentUser

因为在 windows 中默认不允许任何脚本运行(为了避免一些恶意脚本直接运行),所以我们可以使用 **Set-ExecutionPolicy**来改变 PowerShell 运行环境,共有 4 种运行权限,如下所示:

  • Restricted——默认的设置,不允许任何 script 运行;
  • AllSigned——只能运行经过数字证书签名的 script;
  • RemoteSigned——运行本地的 script 不需要数字签名,但是运行从网络上下载的 script 就必须要有数字签名(使用脚本安装 scoop 这一等级就行);
  • Unrestricted——允许所有的脚本运行;

3-开始安装

官方给了[三种安装方式](So What · ScoopInstaller/Scoop Wiki (github.com)),我推荐下面这种自定义安装方式:

  1. 下载安装脚本:
1
irm get.scoop.sh -outfile 'install.ps1'

下载不下来的话可以加我的技术交流 QQ 群(群号在我主页介绍里),我会上传到群文件中
2. 在脚本所在目录执行下面的命令:

1
.\install.ps1 -ScoopDir '你想把scoop安装到那个目录' -ScoopGlobalDir 'Scoop未来安装全局软件的目录' -NoProxy
  • 其中全局软件就是指所有用户可用的软件,对于那些需要管理员权限的程序需要进行全局安装,在安装命令中使用 --global 或 -g 选项即可全局下载对应软件(比如安装字体)
  • 用户级别安装的程序则默认安装在 Scoop 软件本体目录下的 apps 文件夹内

以上执行完毕 scoop 就安装好了,这时候在 powershell 命令行中输入 scoop help,应该就可以看到下面的输出了:
image.png

2-Scoop 优秀设计与实现

  1. 分离用户数据:默认将程序的 用户数据 存储到 persist 目录中,这样当用户日后升级该程序后之前的用户配置依然可用。(但是对于部分程序支持的不是很完善)
  2. shim 软链接: scoop 会自动在 scoop 应用安装路径下的 shims 文件夹下为新安装的程序添加对应的 .exe 文件,而 shims 文件夹提前就已被添加到 PATH 环境变量中,所以程序一旦安装就可以直接在命令行中运行,这样的设计让应用之间不会互相干扰,保证环境的统一和路径不被污染,十分方便。
  3. 对于 GUI 程序 ,scoop 还会自动为其在开始菜单中添加快捷方式,路径: C:\Users\<user>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Scoop Apps

3-Scoop 使用技巧

1-Scoop 常用命令

image.png

1-给 scoop 设置全局代理(科学上网实现加快软件下载速度)

1
2
3
4
# 设置全局代理
scoop config proxy 127.0.0.1:7890
# 取消全局代理
scoop config rm proxy

2-安装卸载软件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 安装之前,通过 search 搜索 APP, 确定软件名称
scoop search  xxx

# 安装 APP
scoop install <app>

# 安装特定版本的 APP;语法 AppName@[version],示例
scoop install XXX@1.1.0

# 卸载 APP 
scoop uninstall <app> #卸载 APP

3-更新软件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
scoop update # 更新 Scoop 自身

scoop update appName1 appName2 # 更新某些app

# 更新所有 app (可能需要在apps目录下操作)
scoop update *

# 禁止某程序更新
scoop hold <app>
# 允许某程序更新
scoop unhold <app>

4-清除缓存和旧版本软件包

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 查看所有以前下载的缓存信息
scoop cache show

# 清除指定程序的下载缓存
scoop cache rm <app>

# 清除所有缓存
scoop cache rm *

# 删除某软件的旧版本
scoop cleanup <app>

# 删除全局安装的某软件的旧版本
scoop cleanup <app> -g

# 删除过期的下载缓存
scoop cleanup <app> -k

5-给命令添加别名(通常用于简短一些常用的长命令,提高输入效率)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# 增删操作
scoop alias add|list|rm [<args>]

## 添加别名,格式:
scoop alias add <name> <command> <description>

# 示例:(注意:必须在 Powershell中运行)
scoop alias add st 'scoop status' '检查更新'
# 检查已添加的别名
scoop alias list -v

Name Command      Summary
---- -------      -------
st   scoop status 检查更新

# 测试已添加的别名 st
scoop st


# 另一个示例:
scoop alias add rm 'scoop uninstall $args[0]' '卸载某 app'
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# Install app  
scoop alias add i 'scoop install $args[0]' 'Install app'  
scoop alias add add 'scoop install $args[0]' 'Install app'  
  
# Uninstall app  
scoop alias add rm 'scoop uninstall $args[0]' 'Uninstall an app'  
scoop alias add remove 'scoop uninstall $args[0]' 'Uninstall an app'  
  
# List apps  
scoop alias add ls 'scoop list' 'List installed apps'  
  
# Update  
scoop alias add u 'scoop update $args[0]' 'Update apps, or Scoop itself'  
scoop alias add upgrade 'scoop update $args[0]' 'Update apps, or Scoop itself'  
  
# Show Status  
scoop alias add ss 'scoop status' 'Show status and check for new app versions'  
  
# Search app  
scoop alias add s 'scoop search $args[0]' 'Search app'

6-看某个应用的官方主页:scoop home typora

Typora主页测试

7-添加软件仓库 Bucket

Scoop 可安装的软件信息存储在 Bucket 中,Scoop 默认的官方 Bucket 为 main ;官方维护的另一个 Bucket 为 extras,这个需要我们手动添加。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# bucket的用法:
scoop bucket add|list|known|rm [<args>]
# 添加extras:
scoop bucket add extras
# 查看官方推荐仓库
scoop bucket known
# 添加第三方bucket(一般在github里面README文件都会提及添加命令怎么写)
scoop bucket add spotify https://github.com/TheRandomLabs/Scoop-Spotify.git
# 添加完仓库后记得:
scoop update

8-安装 scoop-completion

使用 scoop-completion:键入 App 名称的前几个字母后敲击 tab 键进行补全
scoop-completion 包含于 scoopet 库中

1
scoop install scoop-completion

image.png

2-开启多线程下载

使用 Scoop 安装 Aria 2 后,Scoop 会自动调用 Aria 2 进行多线程加速下载。

1
scoop install aria2

使用 scoop config 命令可以对 Aria 2 进行设置,比如 scoop config aria2-enabled false 可以禁止调用 Aria 2 下载。以下是与 Aria 2 有关的设置选项:

  • aria2-enabled: 开启 Aria 2 下载,默认 true
  • aria2-retry-wait: 重试等待秒数,默认 2
  • aria2-split: 单任务最大连接数,默认 5
  • aria2-max-connection-per-server: 单服务器最大连接数,默认 5 ,最大 16
  • aria2-min-split-size: 最小文件分片大小,默认 5M
    在这里推荐以下优化设置,单任务最大连接数设置为 32,单服务器最大连接数设置为 16,最小文件分片大小设置为 1M
1
2
3
4
scoop config aria2-split 32
scoop config aria2-max-connection-per-server 16
scoop config aria2-min-split-size 1M
scoop config aria2-retry-wait 4

3-Scoop 配置开发环境

1-开发环境版本切换

这里需要使用 scoop reset 它的作用是:在同一程序的不同版本之间切换,从而避免版本冲突
命令格式为:scoop reset <java>[@version]

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# Java例子
PS C:> scoop bucket add java

PS C:> scoop install oraclejdk
Installing 'oraclejdk' (12.0.2-10) [64bit]

PS C:> scoop install zulu6
Installing 'zulu6' (6.18.1.5) [64bit]

PS C:> scoop install openjdk10
Installing 'openjdk10' (10.0.1) [64bit]

PS C:> java -version
openjdk version "10.0.1" 2018-04-17
OpenJDK Runtime Environment (build 10.0.1+10)
OpenJDK 64-Bit Server VM (build 10.0.1+10, mixed mode)

PS C:> scoop reset zulu6
Resetting zulu6 (6.18.1.5).
Linking ~\scoop\apps\zulu6\current => ~\scoop\apps\zulu6\6.18.1.5

PS C:> java -version
openjdk version "1.6.0-99"
OpenJDK Runtime Environment (Zulu 6.18.1.5-win64) (build 1.6.0-99-b99)
OpenJDK 64-Bit Server VM (Zulu 6.18.1.5-win64) (build 23.77-b99, mixed mode)

PS C:> scoop reset oraclejdk

PS C:> java -version
java version "12.0.2" 2019-07-16
Java(TM) SE Runtime Environment (build 12.0.2+10)
Java HotSpot(TM) 64-Bit Server VM (build 12.0.2+10, mixed mode, sharing)

# Python例子
# add the 'versions' bucket if you haven't already
scoop bucket add versions 

scoop install python27 python
python --version # -> Python 3.6.2

# switch to python 2.7.x
scoop reset python27
python --version # -> Python 2.7.13

# switch back (to 3.x)
scoop reset python
python --version # -> Python 3.6.2

2-Git 环境配置

1-安装 Git
1
2
3
4
5
# 安装git和git-lfs(大文件传输的git)
scoop install git openssh
scoop install git-lfs
# 测试(有输出版本号就说明下载成功)
git version

为什么加上一个 openssh 的选项?为什么我们管理 git 仓库要用到 SSH?

  • SSH 使用时不需要提供名称和密码所以通过添加公钥和密钥,可以让我们更高效地提交代码,免去重复的操作(git pull 时使用 SSH 链接,Windows 的话一般就是在 C:\Users\Administrator\.ssh 目录下,id_rsa 文件是私钥,id_rsa. pub 是公钥,这些刚下载 git 是没有的,需要后续手动添加,往下看下去吧,关于 SSH 如何利用公私钥实现了免密登录,这篇文写的不错:SSH 免密登录是怎么玩儿的? - 知乎 (zhihu.com)image.png
  • SSH 相较 HTTPS 有加密,更加安全
  • 为什么用 openssh?
    因为 Open Source !OpenSSH - Wikipedia
2-连接自己的 github

前面也说到用 openSSH 和 github 仓库连接,那么现在让我们连接到自己的 github 账号上方便管理自己 github 仓库中的代码!

  1. 创建公私钥
    输入下面的命令,一路回车,你就会看到你的公钥和私钥文件生成到命令行输出所指的目录下了,一般是 C:\Users\Administrator\.ssh
1
ssh-keygen
  1. 记事本打开公钥文件 id_rsa. pub ,复制其中的内容到自己 github 中,具体步骤可以看官方文档:Adding a new SSH key to your GitHub account - GitHub Docs,文档页面右上方小地球可以更改语言
  2. 测试一下是否连接成功
    运行下述命令:
1
ssh -T git@github.com

如果输出如下(可能会有几个 Warning,不过不用管),就说明配置成功了,现在就可以用 SSH 链接 clone 你自己的 github 仓库到本地然后进行代码管理了:

1
Hi <username>! You've successfully authenticated, but GitHub does not provide shell access. 
3-安装 github GUI 软件–Github Desktop
1
scoop install github

4-其他 FAQ

1-bucket 更新时遇到问题

情况是这样:当我运行 scoop update 进行更新时提示: extras bucket 更新失败。于是我将其删除后再添加,提示成功,但是它却把 main bucket (默认的 bucket) 给删除了。通过"scoop status"检查状态时出现 “These app manifests have been removed"并且下面列出了已被移除的软件名单。 那么如何解决此问题?

我们需要重新添加 main bucket :scoop bucket add main

2-网络问题导致 app 安装失败

一个示例:

1
scoop install mediainfo

当安装 mediainfo 时由于网络问题,安装包无法下载,从命令行输出信息中可以看到如下内容:

1
2
3
4
5
6
7
ERROR Download failed! (Error 1) An unknown error occurred
ERROR https://mediaarea.net/download/binary/mediainfo/19.09/MediaInfo_CLI_19.09_Windows_x64.zip
    referer=https://mediaarea.net/download/binary/mediainfo/19.09/
    dir=D:\Scoop\Applications\cache
    out=mediainfo#19.09#https_mediaarea.net_download_binary_mediainfo_19.09_MediaInfo_CLI_19.09_Windows_x64.zip

ERROR & 'D:\Scoop\Applications\apps\aria2\current\aria2c.exe' --input-file='D:\Scoop\Applications\cache\mediainfo.txt'

我们可以发现文件的下载路径和下载后的文件名称,这里 out= 后面的压缩包就是下载后文件的名称,(也可以在 scoop 的 cache 目录下的 mediainfo.txt 文件中找到下载路径与文件名称)

然后我们可以尝试在浏览器或其他下载程序中(可以 fq 的程序中)下载该程序,下载完成后再更改文件名并将其放入 scoop 的 cache 目录,最后再次运行 scoop install mediainfo 即可安装。

3-如何利用 aria 2 进行断点续传?

先看具体示例:

1
2
# 更新 vscode
scoop update vscode-portable

scoop 更新 vscode 时下载到 80%的时候失败了(安装时处理方法也一样)。我们需要在提示中找到如下内容:

1
2
3
4
5
6
7
'D:\Scoop\Applications\apps\aria2\current\aria2c.exe' --input-file='D:\Scoop\Applications\cache\vscode-portable.txt' 
--user-agent='Scoop/1.0 (+http://scoop.sh/) PowerShell/5.1 (Windows NT 10.0; Win64; x64; Desktop)' 
--allow-overwrite=true --auto-file-renaming=false 
--retry-wait=2 --split=5 --max-connection-per-server=5 
--min-split-size=5M --console-log-level=warn --enable-color=false 
--no-conf=true --follow-metalink=true --metalink-preferred-protocol=https 
--min-tls-version=TLSv1.2 --stop-with-process=15584 --continue

我们从上面的信息中提取出下面的命令;若要进行断点续传,只需再次执行下面的命令即可:

1
aria2c.exe --input-file='D:\Scoop\Applications\cache\vscode-portable.txt'

提示下载完成后,我们需要再次运行 scoop 对应的 app 更新命令(或安装命令),即可完成 app 更新(或安装):

1
scoop update vscode-portable

4-高阶使用 scoop 教程哪里找?

结语

创作不易,整理写作这些内容花费了很大精力,希望大家能有所收获,能优化自己的开发效率,更优雅的管理自己开发环境和软件!


感谢您看到最后,如果本文对您有所帮助的话,还希望给我一个一键三连(狗头保命),如果对于我和我的文章感兴趣的话,欢迎点一个关注,您会收到我回答和文章的更新通知,也欢迎加入我建立的技术交流群 QQ:725133797 讨论交流。

最后附上我的个人博客站:Calvin Haynes的博客站,欢迎访问和交流

-------他日江湖相逢 再当杯酒言欢-------

Calvin Haynes
作者: Calvin Haynes ❉
Life is a journey, not a destination.


目录