教程-Scoop 超好用的Windows包管理器
前言
本篇文章主要是对参考资料中几篇文章的拼合,整理,侵删
Scoop 是一个 Windows 包管理工具,类似于 Debian 的 apt
、macOS 的 homebrew
。它由开源社区驱动,体验可能是是目前所有 Windows 包管理工具中最好的。对开发者来说,包管理器能非常方便的部署开发环境,比如 Python 、Node.js 。而对于像博主这样的普通的计算机使用者来说,可以方便的安装一些常用软件,尤其是开源软件,免去了手动去官网下载的繁琐步骤,而且后续对软件进行升级只需要输入一行命令,非常便捷。
环境要求
- Windows 7 SP1 + / Windows Server 2008+
- PowerShell 5(或更高版本,包括 PowerShell Core)和 .NET Framework 4.5(或更高版本)Win10(11)默认满足此条件
- Windows 用户名为英文(Windows 用户环境变量中路径值不支持中文字符)
- 正常、快速的访问 GitHub 并下载资源
安装 Scoop
Scoop 默认使用普通用户权限,其本体和安装的软件默认会放在 %USERPROFILE%\scoop
(即 C:\Users\用户名\scoop
),使用管理员权限进行全局安装 (-g
) 的软件在 C:\ProgramData\scoop
。如果有自定安装路径的需求,那么要提前设置好环境变量,否则后续再改不是一件容易的事情。
- 打开 PowerShell
- 设置用户安装路径
1 | $env:SCOOP='C:\Scoop' |
- 设置全局安装路径(需要管理员权限)
1 | $env:SCOOP_GLOBAL='C:\Scoop_Global' |
- 设置允许 PowerShell 执行本地脚本
1 | Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser |
- 安装 Scoop
1 | iwr -useb get.scoop.sh | iex |
其实,上面两种都不可行
先配置Host文件,加上
199.232.68.133 raw.githubusercontent.com
然后执行另一条可用的网址的命令:
1 | iex (new-object net.webclient).downloadstring('https://raw.githubusercontent.com/lukesampson/scoop/master/bin/install.ps1') |
- 没安装过 Git 则需要安装。
1 | scoop install git |
基础使用
最基础的使用方法和其它包管理器类似,这里就不做赘述了,直接上命令列表:
scoop search <app>
- 搜索软件scoop install <app>
- 安装软件scoop info <app>
- 查看软件详细信息scoop list
- 查看已安装软件scoop uninstall <app>
- 卸载软件,-p
删除配置文件。scoop update
- 更新 scoop 本体和软件列表scoop update <app>
- 更新指定软件scoop update *
- 更新所有已安装的软件scoop checkup
- 检查 scoop 的问题并给出解决问题的建议scoop help
- 查看命令列表scoop help <command>
- 查看命令帮助说明
下载特定版本的软件
使用scoop install [软件名]@版本号
来安装想要的版本。
1 | scoop install python@3.6.8 # 安装指定的版本 scoop |
迁移到新电脑
将文件夹拷贝到新电脑,将文件夹添加到环境变量然后scoop reset *
更换源
因为某些原因,Scoop在国内经常访问不了,可以选择更换源比如这个,但本人并未使用此方法,更建议配置代理。
进阶使用
添加 bucket
所有的包管理器都会有相应的软件仓库 ,而 bucket 就是 Scoop 中的软件仓库。细心的你可能会发现 scoop
翻译为中文是 “舀”,而 bucket
是 “水桶”,所以安装软件可以理解为从水桶里舀水,似乎很形象的说。
Scoop 默认软件仓库(main bucket)软件数量是有限的,但是可以进行额外的添加。通过 scoop bucket known
命令可以查看官方认可的 bucket:
1 | $ scoop bucket known |
以上官方认可的 bucket 可以通过下面这个命令直接添加:
1 | scoop bucket add <bucketname> |
好像有人添加bucket出现问题?如有,请在评论区提出。
extras 涵盖了大部分因为种种原因不能被收录进主仓库的常用软件,这个是强推荐添加的。
1 | scoop bucket add extras |
常用的写盘工具 Rufus 就在 extras
这个仓库中。
1 | scoop install rufus |
nerd-fonts 包含了美化终端时会用到的 Powerline 字体
1 | scoop bucket add nerd-fonts |
当添加 nerd-fonts
仓库后可以通过以下命令搜索到所有的字体:
1 | scoop search "-NF" |
安装字体需要使用管理员权限:
1 | sudo scoop install FiraCode-NF |
第三方 bucket
添加第三方 bucket
1 | scoop bucket add <bucketname> https://github.com/xxx/xxx |
从第三方 bucket 中安装软件
1 | scoop install <bucketname>/<app> |
这里给出一个第三方软件源Scoop Directory,它记录了 Github 上各种 bucket。
清理安装包缓存
Scoop 会保留下载的安装包,对于卸载后又想再安装的情况,不需要重复下载。但长期累积会占用大量的磁盘空间,如果用不到就成了垃圾。这时可以使用 scoop cache
命令来清理。
scoop cache show
- 显示安装包缓存scoop cache rm <app>
- 删除指定应用的安装包缓存scoop cache rm *
- 删除所有的安装包缓存
如果你不希望安装和更新软件时保留安装包缓存,可以加上 -k
或 --no-cache
选项来禁用缓存:
scoop install -k <app>
scoop update -k *
删除旧版本软件
当软件被更新后 Scoop 还会保留软件的旧版本,更新软件后可以通过 scoop cleanup
命令进行删除。
scoop cleanup <app>
- 删除指定软件的旧版本scoop cleanup *
- 删除所有软件的旧版本
与安装软件一样,删除旧版本软件的同时也可以清理安装包缓存,同样是加上 -k
选项。
scoop cleanup -k <app>
- 删除指定软件的旧版本并清除安装包缓存scoop cleanup -k *
- 删除所有软件的旧版本并清除安装包缓存
在同一程序的不同版本之间切换
使用命令:scoop reset [app]@[version]
实例:
1 | scoop reset idea-ultimate-eap@201.6668.13 |
对应版本的程序需要已经安装于本地系统中;所以在你清除某个软件的旧版本时考虑一下自己是否还会再次使用到此旧版本。
另外 idea-ultimate-eap 切换过程可能需要更长时间。
全局安装
全局安装就是给系统中的所有用户都安装,且环境变量是系统变量,对于需要设置系统变量的一些软件就需要全局安装,比如 Node.js、Python ,否则某些情况会出现无法找到命令的问题。
使用 scoop install <app>
命令加上 -g
或 --global
选项可对软件进行全局安装,全局安装需要管理员权限,所以需要提前以管理员权限运行的 PowerShell 。更简单的方式是先安装 sudo
,然后用 sudo
命令来提权执行:
1 | scoop install sudo |
达成在 Windows 上使用
sudo
的成就
使用 scoop list
命令查看已装软件时,全局安装的软件末尾会有 *global*
标志。
1 | ➜ scoop list |
此外对于全局软件的更新和卸载等其它操作,都需要加上 -g
选项:
sudo scoop update -g *
- 更新所有软件(且包含全局软件)sudo scoop uninstall -g <app>
- 卸载全局软件sudo scoop uninstall -gp <app>
- 卸载全局软件(并删除配置文件)sudo scoop cleanup -g *
- 删除所有全局软件的旧版本sudo scoop cleanup -gk *
- 删除所有全局软件的旧版本(并清除安装包包缓存)
别名
⚠️️ 注意:请在 Powershell 中运行下面的命令
1 | # 可用操作 |
代理设置
因为种种原因,有时Scoop会连不上Github,请检查您的代理服务器(比如重启代理软件)。
Scoop 默认使用的是系统代理,如果你想手动指定代理,可以输入下面的命令。需要注意的是只支持 http 协议。
1 | scoop config proxy localhost:1080 |
警告:有些代理软件器http协议使用端口与https协议使用端口并不相同,比如V2ray,配置的时候需要使用正确的端口,有的时候使用系统默认代理设置也是可以的,具体情况具体看待吧。
设置完可以通过
scoop config proxy
查看。
如果你想取消代理,那么输入下面的命令,这将会恢复使用系统代理。
1 | scoop config rm proxy |
注:
- 手动配置http代理后aria2多线程下载有概率不可使用,求修复方案。。。谢谢!
开启多线程下载
使用 Scoop 安装 Aria2 后,Scoop 会自动调用 Aria2 进行多线程加速下载。
1 | scoop install aria2 |
使用 scoop config
命令可以对 Aria2 进行设置,比如 scoop config aria2-enabled false
可以禁止调用 Aria2 下载。以下是与 Aria2 有关的设置选项:
aria2-enabled
: 开启 Aria2 下载,默认true
aria2-retry-wait
: 重试等待秒数,默认2
aria2-split
: 单任务最大连接数,默认5
aria2-max-connection-per-server
: 单服务器最大连接数,默认5
,最大16
aria2-min-split-size
: 最小文件分片大小,默认5M
更详细的见这里,博主在这里推荐以下优化设置,单任务最大连接数设置为 32
,单服务器最大连接数设置为 16
,最小文件分片大小设置为 1M
1 | scoop config aria2-split 32 |
利用 aria2 进行断点续传
先看具体示例:
scoop 更新 vscode 时下载到 80% 的时候 失败了(安装时处理方法也一样)。我们需要在提示中找到如下内容:
1 | 'D:\Scoop\Applications\apps\aria2\current\aria2c.exe' --input-file='D:\Scoop\Applications\cache\vscode-portable.txt' |
我们从上面的信息中提取出下面的命令;若要进行断点续传,只需再次执行下面的命令即可:
1 | aria2c.exe --input-file='D:\Scoop\Applications\cache\vscode-portable.txt' |
当提示下载完成后,我们需要再次运行 scoop 对应的 app 更新命令(或安装命令),即可完成 app 更新(或安装):
1 | scoop update vscode-portable |
一些使用实例
安装和切换JDK、Python的版本
转载自Scoop包管理器的相关技巧和知识,相关内容仅作介绍,一般来说版本管理还是交给专门软件比较好,python可以使用虚拟环境或Anaconda.
这里需要使用scoop reset
它的作用是:重置一个应用程序来解决冲突。
命令格式为:scoop reset <java>[@<version>]
安装和切换不同的 JDK 版本:
1 | PS C:> scoop bucket add java |
安装和切换不同的 Python 版本:
1 | scoop bucket add versions # add the 'versions' bucket if you haven't already |
常用命令总结
emm想要记住上文那么多的知识有些困难,这里总结一下 Scoop 在日常使用中常用的命令:
1 | # 更新 scoop 及软件包列表 |
尾巴
文章仍有许多不足之处,希望大家可以指出,如有疑问,请大家在评论区中提出,也请看到的人积极回答,我将尽力解答并收集问题以完善文章。
遗留的问题
网络问题
fatal: unable to access ‘https://github.com/lukesampson/scoop-extras/‘: OpenSSL SSL_read: Connection was reset, errno 10054
1 | fatal: unable to access 'https://github.com/lukesampson/scoop/': OpenSSL SSL_read: Connection was reset, errno 10054 |
遇到这种情况请检查代理,参考代理设置
手动配置http代理后aria2多线程下载不可使用
如题,求解决方案,如果有大佬知道可以分享在评论区,谢谢~
安装软件失败
网络问题导致app安装失败
step1:检查代理,下载7zip,aria2失败需要开代理,可以直接将代理软件设为全局,也可以自己配置。
step2:手动下载安装文件
一个实例:
1 | ERROR Download failed! (Error 1) An unknown error occurred |
我们可以发现文件的下载路径和下载后的文件名称,这里 out=
后面的压缩包就是下载后 文件的名称,(也可以在 scoop 的 cache
目录下的 mediainfo.txt
文件中找到下载路径与文 件名称)
然后我们可以尝试在浏览器或其他下载程序中(可以 fq 的程序中)下载该程序,下载完成 后再更改文件名并将其放入 scoop 的 cache
目录,最后再次运行 scoop install mediainfo
即可安装。
其它问题导致安装失败
下载其他软件失败看看你有没有装某些软件,如sudo(用于全局安装的,导致某些语法无法使用,详见前文说的全局安装),反正我吧sudo删掉就好了~
Scoop安装软件失败的原因分类
- 未及时更新仓库
- 连不上Github,因为众所周知的原因,解决方案的话可以参考代理设置中的重启/更换代理(参考:代理设置),还不可以的话可以尝试在浏览器中打开Github,然后再尝试。
更新失败
1 | Updating 'adb' (33.0.2 -> 33.0.3) |
上面是报错的命令行提示,在使用Scoop升级的时候出现了这样的错误是让人悲伤的,这个错误经常在使用scoop update *
到时候被引发,因为只要有一个维护者没有跟上最新版本就会导致报错(详见[Feature Request] Offer a flag to skip installs/updates that failed to download),所以可以跳过报错的应用,更新别的应用吧~
参考资料
Scoop Documentation
再谈谈 Scoop 这个 Windows 下的软件包管理器
「一行代码」搞定软件安装卸载,用 Scoop 管理你的 Windows 软件
Scoop - 最好用的 Windows 包管理器
scoop的安装及基本使用
你需要掌握的Scoop技巧和知识