如何更改默认的下载器?

用CURL有许多二进制依赖无法下载,但是用aria2c可以下载,是否可以更改默认的下载工具?

重载 Base.download

把它加到startup里,完美解决了装包难的问题,太好了

方便分享下您的修改吗?特别是重载部分是如何写的,我很好奇。我自己写的实在是很难看。

import Base: download
isload() = println(“yes”)
function download(url::AbstractString, filename::AbstractString)
if Sys.which(“aria2c”) !== nothing
dirna = dirname(filename)
basena = basename(filename)
run(aria2c -c -d $dirna -o $basena $url)
elseif Sys.which(“curl”) !== nothing
run(curl -g -L -f -o $filename $url)
elseif Sys.which(“wget”) !== nothing
try
run(wget -O $filename $url)
catch
rm(filename, force=true)
rethrow()
end
elseif Sys.which(“fetch”) !== nothing
run(fetch -f $filename $url)
else
error(“no download agent available; install curl, wget, or fetch”)
end
filename
end
function download(url::AbstractString)
filename = tempname()
download(url, filename)
end
download(url, filename)

非常感谢!我试试。

如果可以把这个变化提到Julia的PR中,增加这个下载工具,在配置文件中可以指定使用下载工具的尝试顺序,那么所有人都能够受益。

但是好像安装二进制大多用bindeps,这样的话需要改写这个库才有用,重载系统默认下载器没用

您举个例子?我查了几个包,包括以前下载一直比较慢的GR,其中用到的下载都是调用download。

前天在一个新装的Linux上重新装Julia包,其中ZMQ下载失败,用的就是binarydeps,我看了下,修改也容易,只要环境变量配置下,然后修改PlatformEngines.jl,增加aria2的调用即可。依葫芦画瓢,挺简单,我就不贴代码了。改完后,要记着把之前编译过的jl文件删除,以便新代码预编译。供参考。

1 个赞

因为网络好了我没有捣鼓这个了,不过你的经验对于许多人应该还是很有意义的:+1: