scoop提速:解决scoop软件下载慢的问题
文章目录
- 1 安装scoop
- 2 使用scoop加速下载软件
- 2.1 如何加速下载软件
- 2.2 编写powershell函数
- 2.2.1 安装、更新、搜索软件
- 2.2.2 卸载软件
- 2.2.3 查看已安装软件
相比于linux系统,windows缺少一个比较好用的包管理器,而第三方包管理器scoop则在一定程度上解决了这个问题,但是在使用scoop的过程中,往往会由于网络的原因使得软件的安装失败。下面介绍一个方法解决这个问题。
1 安装scoop
管理员权限打开 powershell
Set-ExecutionPolicy RemoteSigned
iwr -useb https://gitee.com/fanyi-ff/poocs/raw/master/install-scoop.ps1 | iex
2 使用scoop加速下载软件
2.1 如何加速下载软件
PS > scoop help install
Usage: scoop install <app> [options]e.g. The usual way to install an app (uses your local 'buckets'):scoop install gitTo install an app from a manifest at a URL:scoop install https://raw.githubusercontent.com/ScoopInstaller/Main/master/bucket/runat.jsonTo install an app from a manifest on your computerscoop install \path\to\app.jsonOptions:-g, --global Install the app globally-i, --independent Don't install dependencies automatically-k, --no-cache Don't use the download cache-u, --no-update-scoop Don't update Scoop before installing if it's outdated-s, --skip Skip hash validation (use with caution!)-a, --arch <32bit|64bit> Use the specified architecture, if the app supports it
查看scoop的安装帮助可以看出,有三种方式用scoop安装一个软件:
# 1 使用默认的安装方式安装一个软件
e.g. The usual way to install an app (uses your local 'buckets'):scoop install git# 2 通过bucket中一个URL指向的清单文件(**.json)安装一个软件
To install an app from a manifest at a URL:scoop install https://raw.githubusercontent.com/ScoopInstaller/Main/master/bucket/runat.json# 3 通过本地的清单文件(**.json)安装一个软件
To install an app from a manifest on your computerscoop install \path\to\app.json
下面随便选择一个软件,来查看其对应的清单文件是什么样子的。下面以软件llvm
为例:
# 可以看到此软件在scoop的 main bucket 里面
PS > scoop search llvm
'main' bucket:llvm (14.0.3)
下面进入scoop的main bucket,查看其清单文件
https://github.com/ScoopInstaller/Main/blob/master/bucket/llvm.json
可以看到,清单文件中软件的下载地址是github.com
,由此可以分析,软件下载慢正是由于网址的原因。那么便可以通过使用github的代理网站,加速下载软件:
https://ghproxy.com/
首先将该清单文件下载到本地,然后再修改其下载地址,使用上面查询到的安装方式三安装一个软件。
# powershell
PS > Invoke-WebRequest -Uri https://ghproxy.com/https://github.com/ScoopInstaller/Main/blob/master/bucket/llvm.json -OutFile llvm.json
再使用修改过的清单文件重新下载llvm
并观察下载效果。
PS > scoop install llvm.json
WARN Purging previous failed installation of llvm.
ERROR 'llvm' isn't installed correctly.
Removing older version (14.0.3).
'llvm' was uninstalled.
WARN Scoop uses 'aria2c' for multi-connection downloads.
WARN Should it cause issues, run 'scoop config aria2-enabled false' to disable it.
WARN To disable this warning, run 'scoop config aria2-warning-enabled false'.
Installing 'llvm' (14.0.3) [64bit]
Starting download with aria2 ...
Download: [#80ca50 114MiB/263MiB(43%) CN:5 DL:5.5MiB ETA:26s]
再次下载可以发现,尝试的修改是有效的,下载软件的速度达到了5兆字节每秒(Download: [#80ca50 114MiB/263MiB(43%) CN:5 DL:5.5MiB ETA:26s]
)。
2.2 编写powershell函数
下面将此过程编写为一个powershell函数,此后打开powershell,直接调用编写好的函数并传入参数就可以完美享受scoop的便利了。
https://github.com/ScoopInstaller/Main/blob/master/bucket/llvm.json
观察软件的清单文件的URL地址可以看出,要下载一个软件,要知道一个软件的bucket和软件名(清单文件名)。比如说llvm,其bucket为main
,软件名为llvm
,URL的其它部分都是不变的,所以一个软件对应的清单文件的URL格式为:
https://github.com/ScoopInstaller/***/blob/master/bucket/***.json
知道这些之后,下面就是替换清单文件中的软件源地址(如果其在github上,则用github的镜像网站),因此编写目标函数的三个要点就是:
- 软件仓库名(bucket)
- 软件名
- 修改软件源地址(若在github上,则改用github镜像网站)
由于大部分软件都是在github上面,因此这种方式是可行的,能解决大部分软件的下载问题。
注意:
- 请将此函数结合多线程下载工具
aria2
使用(kscoop -install aria2 -bucket main
或scoop install aria2
)
function kscoop {<#.SYNOPSIS加速托管在github上的scoop软件的下载及更新.DESCRIPTION加速托管在github上的scoop软件的下载及更新。支持软件的安装、更新、搜索,及通过本函数安装软件的查询。函数涉及两个主要变量,不想使用默认位置可自行修改:# 通过本函数安装过的软件的json文件所在位置$appJsonPath = "$home\documents\${psConfigDir}\scoop\apps\"# 记录通过本函数安装过的软件的信息$appsListFile = "$home\documents\${psConfigDir}\scoop\AppsList.json".PARAMETER install要安装软件的全限定名,或者软件清单文件(xx.json)对应的Url.PARAMETER bucket软件所在的 bucket.PARAMETER arch软件的架构,32bit 或 64bit,默认安装 64bit 的软件,使用 -arch 32bit 安装32位的软件.PARAMETER noCache安装时是否使用缓存,默认使用缓存,若开启此开关则不使用.PARAMETER update要更新软件的全限定名,或 * 。若参数值为 * ,则更新已安装的所有软件.PARAMETER search要搜索的软件的名字,不必是软件的全限定名,若名字有空格则用引号括住.PARAMETER list若开启此开关,则列出 $appsListFile 中的软件信息.EXAMPLEkscoop -install grep -bucket main指定仓库名安装grep,指定仓库名时软件会直接安装.EXAMPLEkscoop -install grep不指定仓库名安装grep.EXAMPLEkscoop -install grep -bucket main -arch 32bit -noCache安装32位的软件,不使用缓存.EXAMPLEkscoop -install https://github.com/ScoopInstaller/Main/blob/master/bucket/psutils.json -noCache通过 Url 安装一个软件.EXAMPLEkscoop -update llvm更新 llvm.EXAMPLEkscoop -update *更新已安装的所有软件.EXAMPLEkscoop -search grep使用浏览器在scoop仓库中搜索 grep.EXAMPLEkscoop -list列出 $appsListFile 中的软件信息#>param ([Parameter(Mandatory, ParameterSetName = 'InstallApp')][string]$install,[Parameter(ParameterSetName = 'InstallApp')][string]$bucket,[Parameter(ParameterSetName = 'InstallApp')][string]$arch = "64bit",[Parameter(ParameterSetName = 'InstallApp')][Switch]$noCache,[Parameter(Mandatory, ParameterSetName = 'UpdateApp')][string]$update,[Parameter(Mandatory, ParameterSetName = 'SearchApp')][string]$search,[Parameter(Mandatory, ParameterSetName = 'ListApp')][Switch]$list)begin {#basePath默认位于当前powershell配置目录下$psConfigDir = switch ($PSVersionTable.PSVersion.Major) {7 { 'powershell' }Default { 'windowspowershell' }}$basePath = "$home\documents\${psConfigDir}\scoop\"$appsListFile = Join-Path $basePath "AppsList.json"$appJsonPath = Join-Path $basePath 'apps'if (!(Test-Path $appsListFile)) {New-Item $appsListFile -Force}if (!(Test-Path $appJsonPath)) {New-Item $appJsonPath -Force}#读取使用本方法安装过的软件的信息$appsInAppsListFile = Get-Content $appsListFile | ConvertFrom-Json -AsHashtableif ( $null -eq $appsInAppsListFile ) { $appsInAppsListFile = @{} }$bucketMap = @{'Extras' = 'ScoopInstaller#extras''Java' = 'ScoopInstaller#java''Main' = 'ScoopInstaller#main''Nonportable' = 'ScoopInstaller#nonportable''PHP' = 'ScoopInstaller#php''Versions' = 'ScoopInstaller#versions''games' = 'Calinou#scoop-games''nerd-fonts' = 'matthewjberger#scoop-nerd-fonts''nirsoft' = 'kodybrown#scoop-nirsoft''sysinternals' = 'niheaven#scoop-sysinternals'}$urlPattern = "https://ghproxy.com/https://github.com/bucket_owner/{0}/blob/master/bucket/{1}.json"# $urlPattern = "https://hub.fastgit.xyz/ScoopInstaller/{0}/blob/master/bucket/{1}.json"# $urlPattern = "https://github.91chi.fun/https://github.com/ScoopInstaller/{0}/blob/master/bucket/{1}.json"}process {switch ($PsCmdlet.ParameterSetName) {"InstallApp" {$install = $install.Trim()#参数为urlif ($install -match "^https://github\.com.*json$") {$bucket = $install.Split('/')[4]$appName = $install.Substring($install.LastIndexOf('/') + 1).Replace(".json", '')}#参数为软件名if ($install -notmatch "^https://github\.com/.*json$") {$appName = $install#如果没有指明bucket,检查该软件之前是否安装过if ([String]::IsNullOrEmpty($bucket)) {if ($appsInAppsListFile.Contains($appName)) {$arch = $appsInAppsListFile[$appName].arch$bucket = $appsInAppsListFile[$appName].bucket} else {# 未安装过则搜索此软件$res = scoop search $appName$res | format-table$appName = Read-Host ">>>请输入要安装的软件名, 区分大小写(Name)"$app = $res.where( { $_.name -eq $appName } )while ($null -eq $app.source) {$appName = Read-Host ">>软件 '$appName' 不存在, 请重新输入软件名"$app = $res.where( { $_.name -eq $appName } )}$bucket = $app.source}}}$bucket_owner, $real_bucket = $bucketMap[$bucket].split('#')$url = $urlPattern -f $real_bucket, $appName$url = $url.Replace('bucket_owner', $bucket_owner)$jsonFile = Join-Path $appJsonPath "${appName}.json"if ($noCache -or !(Test-Path $jsonFile)) {$statusCode = k-ScoopDownHelper -url $url -file $jsonFileif ($statusCode -ne 200) { return }scoop install $jsonFile -a $arch -k} else {scoop install $jsonFile -a $arch}#将新软件记录到文件中if (-not $appsInAppsListFile.Contains($appName)) {$appsInAppsListFile.Add($appName, @{ 'bucket' = $bucket; 'arch' = $arch })$appsInAppsListFile |ConvertTo-Json |Out-File $appsListFile}}"UpdateApp" {$appName = $update$installedApps = scoop list#更新所有软件if ($appName -eq '*' ) {$installedApps | Format-Table$choice = Read-Host "确认更新上述 $($installedApps.name.count) 个软件吗?(y/n)"if ( 'y' -eq $choice ) {$installedApps.name.ForEach( {scoop uninstall $_kscoop -install $_ -noCache} )}}#更新某个软件else {$app = $installedApps.name.Where({ $_ -eq $appName })if (0 -ne $app.count) {scoop uninstall $appNamekscoop -install $appName -noCache} else {Write-Host "软件 $appName 未安装!" -ForegroundColor Red}}}"SearchApp" {Start-Process msedge "https://scoop.sh/#/apps?q=${search}&s=0&d=1&o=true"}"ListApp" {Write-Host "${appsListFile} 中的软件:"$appsInAppsListFile}}}
}
function k-ScoopDownHelper ($url, $file) {<#.DESCRIPTION根据scoop仓库中软件的 URL 地址,将软件对应的 json 文件下载到本地#>$urlMirror = @{'https://www.python.org/ftp/python' = 'https://repo.huaweicloud.com/python'"https://github.com/" = "https://ghproxy.com/https://github.com/""https://raw.githubusercontent.com" = "https://ghproxy.com/https://raw.githubusercontent.com"}try {$Response = Invoke-WebRequest -Uri $url$StatusCode = $Response.StatusCode} catch {$StatusCode = $_.Exception.Response.StatusCode.value__}switch ($StatusCode) {200 {$sbResCont = [System.Text.StringBuilder]::new($Response.Content)foreach ($originUrl in $urlMirror.keys) {[void]$sbResCont.Replace($originUrl, $urlMirror[$originUrl])}Set-Content -Path $jsonFile -Value $sbResCont#sed -i '#s/https:\/\/github.com/https:\/\/ghproxy.com\/https:\/\/github.com/#s/raw.githubusercontent.com/raw.staticdn.net/#' $jsonFile}Default {Write-Host "出现错误,无法下载文件:`n`t${url}" -ForegroundColor Red}}return $StatusCode
}
1、将上面的函数保存到powershell的配置文件,在配置文件中的自定义内容,每次启动powershell时都会被自动加载。
powershell 5.x 配置文件位置
C:\Users\***\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1powershell 7.x 配置文件位置
C:\Users\***\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
2、将上面函数添加到配置文件后,请执行 .$profile
命令或关闭当前powershell,重新打开一个powershell,否则函数不生效。
3、不要删除路径 $basePath
中的任何文件。
2.2.1 安装、更新、搜索软件
注意:
- 本方法只对在github上面的软件有加速效果,并不是scoop仓库中所有软件都托管在github上,因此当安装、更新那些不在github上面的软件,仍可能出现下载速度慢的情况
PS > man kscoopNAMEkscoopSYNOPSIS加速托管在github上的scoop软件的下载及更新SYNTAXkscoop -install <String> [-bucket <String>] [-arch <String>] [-noCache] [<CommonParameters>]kscoop -update <String> [<CommonParameters>]kscoop -search <String> [<CommonParameters>]kscoop -list [<CommonParameters>]DESCRIPTION加速托管在github上的scoop软件的下载及更新。支持软件的安装、更新、搜索,及通过本函数安装软件的查询。函数涉及两个主要变量,不想使用默认位置可自行修改:# 通过本函数安装过的软件的json文件所在位置$basePath = "$home\documents\${psConfigDir}\scoop\apps\"# 记录通过本函数安装过的软件的信息$appsListFile = "$home\documents\${psConfigDir}\scoop\AppsList.json"PARAMETERS-install <String>要安装软件的全限定名,或者软件清单文件(xx.json)对应的UrlRequired? truePosition? namedDefault value Accept pipeline input? falseAccept wildcard characters? false-bucket <String>软件所在的 bucketRequired? falsePosition? namedDefault value Accept pipeline input? falseAccept wildcard characters? false-arch <String>软件的架构,32bit 或 64bit,默认安装 64bit 的软件,使用 -arch 32bit 安装32位的软件Required? falsePosition? namedDefault value 64bitAccept pipeline input? falseAccept wildcard characters? false-noCache [<SwitchParameter>]安装时是否使用缓存,默认使用缓存,若开启此开关则不使用Required? falsePosition? namedDefault value FalseAccept pipeline input? falseAccept wildcard characters? false-update <String>要更新软件的全限定名,或 * 。若参数值为 * ,则更新已安装的所有软件Required? truePosition? namedDefault value Accept pipeline input? falseAccept wildcard characters? false-search <String>要搜索的软件的名字,不必是软件的全限定名,若名字有空格则用引号括住Required? truePosition? namedDefault value Accept pipeline input? falseAccept wildcard characters? false-list [<SwitchParameter>]若开启此开关,则列出通过本函数安装过的软件。非当前已安装软件。Required? truePosition? namedDefault value FalseAccept pipeline input? falseAccept wildcard characters? false<CommonParameters>This cmdlet supports the common parameters: Verbose, Debug,ErrorAction, ErrorVariable, WarningAction, WarningVariable,OutBuffer, PipelineVariable, and OutVariable. For more information, seeabout_CommonParameters (https://go.microsoft.com/fwlink/?LinkID=113216). INPUTSOUTPUTS-------------------------- EXAMPLE 1 --------------------------PS > kscoop -install grep -bucket main指定仓库名安装grep,指定仓库名时软件会直接安装-------------------------- EXAMPLE 2 --------------------------PS > kscoop -install grep不指定仓库名安装grep-------------------------- EXAMPLE 3 --------------------------PS > kscoop -install grep -bucket main -arch 32bit -noCache安装32位的软件,不使用缓存-------------------------- EXAMPLE 4 --------------------------PS > kscoop -install https://github.com/ScoopInstaller/Main/blob/master/bucket/psutils.json -noCache通过 Url 安装一个软件-------------------------- EXAMPLE 5 --------------------------PS > kscoop -update llvm更新 llvm-------------------------- EXAMPLE 6 --------------------------PS > kscoop -update *更新已安装的所有软件-------------------------- EXAMPLE 7 --------------------------PS > kscoop -search grep使用浏览器在scoop仓库中搜索 grep-------------------------- EXAMPLE 8 --------------------------PS > kscoop -list列出 $appsListFile 中的软件信息RELATED LINKS
2.2.2 卸载软件
PS > scoop uninstall llvm # 直接使用原生命令即可
2.2.3 查看已安装软件
PS > scoop list # 直接使用原生命令即可
scoop提速:解决scoop软件下载慢的问题相关推荐
- Windows解决scoop下载错误:raw.githubusercontent.com:443
命令行下载scoop: Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh ...
- 一加5应用未安装怎么解决_一加手机x安装不了软件下载是什么原因解决方法
一加手机X作为近期提出的一款手机,主要以小屏幕的机型为主,做工精致,轻便快捷,一出场就受到很多网友们的喜爱.那么一加手机x安装不了软件下载是什么原因?怎么解决?下面小编就为大家详细介绍一下,一起来看看 ...
- MIUI国际/欧版使用小米应用商店/国内浏览器-解决不会下载软件/上网问题
MIUI国际版/欧版系统十分简洁,并且内置软件和大陆全部不同,导致新手使用门槛很高 最常见的就是手机上网和软件下载这2大问题.国际版预装的是Googlplay商店,想要下载 软件必须在手机上登录后,才 ...
- cad无法安装_你的软件下载好了,为什么安装不上?有两个原因,解决方法在这...
CAD软件下载好了,安装总是提示失败应该怎么解决?其实安装出错的问题还是很好解决的,我们先来看看是因为哪些原因导致的吧! 一.安装软件提示出错 1.CAD软件已安装 有一种情况是小伙伴想要尝试重新安装 ...
- 简单几步让App Store软件下载快如迅雷
转自:http://pad.zol.com.cn/237/2376160.html 对于一个苹果iOS系统的用户来讲,最痛苦的事情莫过于下载iTunes AppStore中软件时漫长的等待时间,特别是 ...
- scoop mysql_使用scoop包管理器
使用scoop包管理器 在Linux,Mac上都有对应的包管理器,在windows上也不例外,使用包管理器的优点是不用再到官网去找软件,能够一条命令就更新. 再windows上的包管理器有choco和 ...
- 【技术贴】五分钟解决打开软件提示windows正在设置Microsoft Office Profes
[技术贴]解决打开软件提示windows正在设置Microsoft Office Professional Edition 2003,请插入光盘|office安装提示错误139 解决办法很简单, 1. ...
- Computer:成功解决安装软件时需要系统空间环境辅助程序(比如Microsoft Visual C++2010 x86 Redistributable安装失败)
Computer:成功解决安装软件时需要系统空间环境辅助程序(比如Microsoft Visual C++2010 x86 Redistributable安装失败) 目录 解决问题 解决方法 解决问题 ...
- 成功解决解决VM软件安装Linux的Ubuntu过程,开启Linux出现Oprating System not found错误
Linux:解决VM软件安装Linux的Ubuntu过程中,开启Linux出现Oprating System not found错误 导读 最讨厌网上回答的啰嗦和不清晰!本人最讨厌啰嗦,直接上来,图文 ...
最新文章
- Swift编程语言学习10—— 枚举属性监视器
- 在 OpenGL ES 2.0 上实现视差贴图(Parallax Mapping)
- 如何将网页部署到maven_如何通过Rultor将Maven工件部署到CloudRepo
- 《20天吃透Pytorch》Pytorch自动微分机制学习
- convert.todatetime指定日期格式_JDK1.8新增日期时间类型
- Web2.0:天使投资与VC的竞技场
- iOS数据持久化(二)SQLite
- python udp socket通信
- 2022-2027年中国电动汽车充电站及充电桩行业市场深度分析及投资战略规划报告
- 量子计算机能做到0延迟吗,延迟选择量子擦除实验
- Unity VR开发教程 OpenXR+XR Interaction Toolkit 2.1.1 (一) 安装和配置
- Java实现在图片上添加文字(水印)
- 怎么设置计算机显示列表格式,(怎样显示excel的文件后缀名)excle后缀格式怎么显示...
- 微信公众号的申请以及测试号的申请
- IEC104起始地址
- 卡巴斯基2019安装之后电脑网速变慢
- 详解eclipse如何配置tomcat
- MAC版本 12.2下 Lightroom2021版本闪退解决办法
- 京东城市陈旭旭:AI和大数据如何撬动“城市计算”?| AIoT+智慧城市峰会
- R语言|求ROC和AUC值
热门文章
- cas146368-07-2|1-乙基-2,3,3-三甲基-3H-吲哚-5-磺酸内盐花菁染料合成路线-齐岳生物
- l4d2 加入指定服务器,朝舞网 - Windows服务器上搭建求生之路(L4D2)Steam社区服务器...
- 利用微博做网络营销的9种绝招
- 【生活记录】2019年2月春节 哈尔滨,亚布力,雪乡 自驾游经验
- python数据参数化
- EasyBCD的使用心得
- 企业账号申请 高德地图_如何将自己的企业位置信息,添加到高德等各大地图上?一招搞定!...
- 【华安php入门系列】--第2天-php的变量
- 什么是网关及网关作用
- 一个程序员的2018年终总结