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

2023年 10月 10日 150.5k 0

前言

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 中打开远程权限

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)),我推荐下面这种自定义安装方式:

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

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

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

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

    2-Scoop 优秀设计与实现

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

    1-Scoop 常用命令

    image.png

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

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

    2-安装卸载软件

    # 安装之前,通过 search 搜索 APP, 确定软件名称
    scoop search  xxx
    
    # 安装 APP
    scoop install 
    
    # 安装特定版本的 APP;语法 AppName@[version],示例
    scoop install XXX@1.1.0
    
    # 卸载 APP 
    scoop uninstall  #卸载 APP
    

    3-更新软件

    scoop update # 更新 Scoop 自身
    
    scoop update appName1 appName2 # 更新某些app
    
    # 更新所有 app (可能需要在apps目录下操作)
    scoop update *
    
    # 禁止某程序更新
    scoop hold 
    # 允许某程序更新
    scoop unhold 
    

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

    # 查看所有以前下载的缓存信息
    scoop cache show
    
    # 清除指定程序的下载缓存
    scoop cache rm 
    
    # 清除所有缓存
    scoop cache rm *
    
    # 删除某软件的旧版本
    scoop cleanup 
    
    # 删除全局安装的某软件的旧版本
    scoop cleanup  -g
    
    # 删除过期的下载缓存
    scoop cleanup  -k
    

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

    # 增删操作
    scoop alias add|list|rm []
    
    ## 添加别名,格式:
    scoop alias add   
    
    # 示例:(注意:必须在 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'
    
    
    • 一些设置别名的技巧(来自 Scoop Aliases (github.com))
    # 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,这个需要我们手动添加。

    # bucket的用法:
    scoop bucket add|list|known|rm []
    # 添加extras:
    scoop bucket add extras
    # 查看官方推荐仓库
    scoop bucket known
    # 添加第三方bucket(一般在github里面README文件都会提及添加命令怎么写)
    scoop bucket add spotify https://github.com/TheRandomLabs/Scoop-Spotify.git
    # 添加完仓库后记得:
    scoop update
    
    • 推荐一个网址可以查询你想要下载那个 app 在哪个 bucket 里面:Apps | Scoop
    • 官网 buckets 列表:Scoop - Buckets
    • 我也准备自建自己的 bucket 了,也欢迎大家未来支持:CalvinHaynes/MyScoopBucket: Windows的Scoop包管理器的自建Bucket (github.com)

    8-安装 scoop-completion

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

    scoop install scoop-completion
    

    image.png

    2-开启多线程下载

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

    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
    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 [@version]

    # 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 ~scoopappszulu6current => ~scoopappszulu66.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
    # 安装git和git-lfs(大文件传输的git)
    scoop install git openssh
    scoop install git-lfs
    # 测试(有输出版本号就说明下载成功)
    git version
    

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

    • SSH 使用时不需要提供名称和密码所以通过添加公钥和密钥,可以让我们更高效地提交代码,免去重复的操作(git pull 时使用 SSH 链接,Windows 的话一般就是在 C:UsersAdministrator.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 仓库中的代码!

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

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

    Hi ! You've successfully authenticated, but GitHub does not provide shell access. 
    
    3-安装 github GUI 软件--Github Desktop
    scoop install github
    
    • 软件界面图片如下:(如果希望进一步了解 git,看我这篇文章--一文教你玩转Git和Github - 知乎 (zhihu.com))
      githubdesktop

    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 安装失败

    一个示例:

    scoop install mediainfo
    

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

    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:ScoopApplicationscache
        out=mediainfo#19.09#https_mediaarea.net_download_binary_mediainfo_19.09_MediaInfo_CLI_19.09_Windows_x64.zip
    
    ERROR & 'D:ScoopApplicationsappsaria2currentaria2c.exe' --input-file='D:ScoopApplicationscachemediainfo.txt'
    

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

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

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

    先看具体示例:

    # 更新 vscode
    scoop update vscode-portable
    

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

    'D:ScoopApplicationsappsaria2currentaria2c.exe' --input-file='D:ScoopApplicationscachevscode-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
    

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

    aria2c.exe --input-file='D:ScoopApplicationscachevscode-portable.txt'
    

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

    scoop update vscode-portable
    

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

    • 最权威当然是官方文档啦:Home · ScoopInstaller/Scoop Wiki (github.com)
    • 当然也有其他一些不错的中文资源如下:
      • Scoop 进阶教程 - 知乎 (zhihu.com)
      • 借助Docker和Scoop快速重建Windows11系统开发环境 _ 阁主手札 (gznotes.com)
      • Scoop 进阶 - 建立自己的Bucket - 知乎 (zhihu.com)

    结语

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

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

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

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论