安装步骤:
a.下载registry
b.安装GR库
c.下载二进制依赖文件
下面就这三个步骤说说本人是下载绘图库走过的坑。为了防止安装更新版本,再次踏坑,特此记录。
下载任何库,都需要重新git clone 一下GitHub上的registry,即使你之前下载过。这是因为Julia最开始设计的库都是利用git clone 下载的,为了向前兼容,仍然延续。但是对于国内下载GitHub的速度限制,有时候git clone 就需要等很久。通过Julia中文社区,定位到北京外国语大学镜像源站点,根据提示,修改registry即可。
刚才已经说了registry是从GitHub下载的,其实一般的库也是从GitHub上下载的。如果在Julia界面运行如下代码:
julia > import Pkg;Pkg.add("GR")
会发现print的结果中,大概需要20多个库,最耗费时间的就是git clone这个步骤。(我是根据输出结果快慢判定的,最后百度了以下,正是git 这个步骤拖慢了下载。) 最终在Julia中文社区找到了解决方式,设置bfsu的镜像源.
~/.julia/config/startup.jl文件包含了Julia启动执行的语句,可以通过手动创建此文件,添加一行:
ENV["JULIA_PKG_SERVER"] = "https://mirrors.bfsu.edu.cn/julia/static"
或者执行以下代码:
julia > import Pkg; # 导入下载包管理工具
julia > Pkg.add("JuliaZH") # 下载JuliaZH
julia > using JuliaZH # 导入JuliaZH
julia > JuliaZH.generate_startup("BFSU") # 设置镜像源
你也可以使用Pkgserver来设置ustc的镜像源,但就文件结构和命名方式来说,我个人还是比较习惯使用bfsu,而且最重要的一点,就是bfsu的数据包更新快,很多包都是最新的,反观ustc,有些都是2,3年前的。
就一般的语言库来说,只要前两个步骤安装成功了,应该就能用了,但是Julia不太一样,因为Julia的一些底层绘图库依赖于c,c++的二进制编译文件,也就是来说还没有形成完整的生态圈,但是相对的,也解释了Julia语言的高效性。(依赖于c和c++,能不高效吗?)
但是也就是因为这一步,把很多学习Julia绘图库的人员劝退的。因为下载二进制文件,比如说libGR.so(linux)或者libGR.dll(windows),都是指向GitHub上的,但是GitHub又是指向国外服务器的,在国内下载速度基本不到10k/s,一个30M的压缩包,你就好好的等吧,等到天荒地老,等到怀疑人生。
其实这不是最可怕的,也就多等一下,但是最关键的一点----不是断点续传的。而且一旦下载中断,中间下载的数据包就会包含错误,即使你再重新下载,几秒就成功build了,但是你一使用这个库,就会报错找不到libGR.so或者libGR.dll。这是因为包含错误的数据包中断之后,一直存在,重新build当然不会成功,必须要删除下载的压缩包~/.julia/packages/GR/8mv9n/deps/downloads/gr-0.51.0-Linux-x86_64.tar.gz或者整个GR,重新下载,但是仍然由于下载的限制可能会出错。
我最开始在Linux上的conda环境下装Julia,由于在REPL模式下,我的Ubuntu没有装图形界面,加载不了图像,所以最后我希望在jupyter notebook上使用。为了下载这个GR,重新删除下载的几次之后,等了很久,居然成功了,为了以后开发方便,我觉得还是要在Windows上安装ide。这又回到了下载GR的原点…
成功安装jetbrain的intellij IDEA后,我又要重新下载GR,这一次没有那么幸运,等了很久,也没有成功,在此期间,我百度了很多相关的网站,看到一个网址有GR的二进制tar包,但是由于版本只有0.34.0,我决定放弃。最后我决定看源码,利用辅助工具下载,解压,然后放到指定文件。
参考Julia安装Plots报错(build GR卡死)
打开文件C:\Users\26947.julia\packages\GR\8mv9N\deps\build.jl,关于windows,其中C:\Users\26947是用户家目录,在REPL模式,输入homedir即可看到用户家目录。有以下这段代码:
# 第一个if语句是从下载tar包,$tarball=gr-0.51.0-Windows-x86_64.tar.gz
# 这里的$tarball根据不同的系统说的是不同版本tar
# 也可以查看之前下载失败的~/.Julia/8mv9N/GR/deps/downloads下的文件名
# 下载地址:https://gr-framework.org/downloads/gr-0.51.0-Windows-x86_64.tar.gz
# 为了加速下载,本人使用了辅助工具(自行百度ldm),速度将近100k/s,30M的tar包,大概7,8分钟就下好了
if !ok
if !try_download("https://gr-framework.org/downloads/$tarball", file)
@info("Using insecure connection")
if !try_download("http://gr-framework.org/downloads/$tarball", file)
@info("Cannot download GR run-time")
end
end
end
# 解压到指定目录
if os == :Windows
home = Sys.BINDIR
if VERSION > v"1.3.0-"
home = joinpath(Sys.BINDIR, "..", "libexec")
end
# Windows:当前目录deps下的两层解压命令
# 先将gr-0.51.0-Windows-x86_64.tar.gz解压gr-0.51.0-Windows-x86_64.tar
# 再将gr-0.51.0-Windows-x86_64.tar解压成gr-0.51.0-Windows-x86_64
# 由于电脑上有一些rar解压软件,我就是直接解压,然后粘贴到目录deps下
# 如果报错libGR.dll找不到,就粘贴到deps同级目录下,并重命名为gr
success(`$home/7z x downloads/$tarball -y`)
rm("downloads/$tarball")
tarball = tarball[1:end-3]
success(`$home/7z x $tarball -y -ttar`)
rm(tarball)
else
run(`tar xzf downloads/$tarball`)
rm("downloads/$tarball")
end
Tips:1.如果是首次安装,直接需要在deps的同级目录下创建一个空的build.log文件(本来是记录安装二进制文件的记录)
2.首次使用Plots,需要加载一些配置,稍等一下,就可以了。
3.如果是Linux用户,可以利用辅助工具下载gr-0.51.0-Linux-x86_64.tar.gz,然后上传到Linux上,利用tar -xzvf gr-0.51.0-Linux-x86_64.tar.gz -o gr ,然后移动到deps的同级目录下。重启julia的REPL模式.
4.学会了这种方法,安装Julia包,再也不会事倍功半了。