喜大普奔,北外镜像上线,使用简单。
julia | 镜像站使用帮助 | 北京外国语大学开源软件镜像站 | BFSU Open Source Mirror
本人julia新手,开始学习时安装包时也遇到很多困难。鉴于新手学习julia遇到最多的困难是包的安装,因此写下自己的理解,希望以下内容对julia新手能略有帮助。
同时本人并不专业,抛砖引玉,希望大神们能够不吝纠正错误,增加内容等,以便帮助众多julia新手跨过包安装这个门槛。
当我们安装包时,会有3个限速步骤。
-
- update registry 同步
-
- Pkg.add 下载源码
-
- pkg.build 下载依赖的二进制文件。
1.julia的package默认存放在哪?
julia的package的源码仓库存是放在github上的一个个项目,可以由任意人员开发。
2.Pkg.Registry
julia官方收录的package,由github上的juliaRegistries中的general 仓库维护。registry其实仅仅是个目录,包名字列表,记录了包的各个版本信息,依赖关系等。windows该列表会下载到个人目录的.julia/registries文件夹中。
每次Pkg.add是会先 update /get-repo 所有的general,然后在registries仓库中查找要安装的包。
最基本的registries是general,默认同步地址是github上的 JuliaRegistries/General项目。在github, 科大,浙大均有此文件可以同步。
Pkg.Registry.add(Pkg.RegistrySpec(url="https://mirrors.zju.edu.cn/julia/registries/General.git"))
该过程会替换掉默认的general。然后每次安装包前的updata general就会改为国内镜像。但注意这仅仅是获取包目录列表的地址改了,Pkg.add下载包源码仍然从默认的github下载。
3. Pkg.add
Pkg.add(“xxx”)会先在resistry先查找该包,找出该包的依赖关系。然后从github xxxx项目下载该包及该包的依赖包。
注意,add仅仅是下载了该xxx在github上的包及依赖包到.julia下的package文件夹。
PkgMirror可以更改获取源码包的地址为国内镜像。
4.Pkg.build
Pkg.add仅仅是下载了包,并未安装。一般来说,纯julia代码写的包,第一次使用时可直接编译。
非纯julia的包则还需要build。build针对是非纯julia包,如GR包。gr是一个底层绘图库,可能是C/C++写的绘图基础设置。GR包是使用julia对gr库的封装。Pkg.add时仅仅是下载了GR包的julia代码部分,并未下载其引用的gr.tar.gz或者gr.exe二进制文件。而在build时,则会下载该gr库的二进制文件。
build过程实际上是运行了包目录下build.jl文件。该build一般是为了解决二进制依赖,当然,也可做任何事情,这取决于build.jl怎么写。一般来说,build.jl过程是下载依赖的二进制底层库,并解压到合适的位置。在build.jl文件中,只给出了gr的链接,大多在github项目的asset部分,存放在s3.amazon AWS云服务器上。实际上国内安装package,遇到的最大问题就在于此,amazon AWS的S3服务器在国内无法访问。
以gr为例,默认下载是github 的asset(实际上是amazon S3服务器)。gr的build文件还提供了其他下载地址,即gr的官网下载。不幸的是,这两个链接国内均难以下载。
设置PkgServer可以更改二进制文件的下载地址。
5.artifacts
artifact为为了解决二进制依赖文件难以下载而设置的。julia官方设置了一个服务器,该server专门用于存放依赖的二进制文件。因此,在build时,下载二进制文件会转为从artifact服务器下载。
artifact的一个好处是可以设置镜像,这解决了下载二进制文件难这个问题。
但是为什么安装GR时依然困难?前面说了,build时干什么取决于build.jl文件怎么写。gr包的下载地址依然是gtihub和官网,而不是artifact服务器。GR尚未 更改自己的build文件。。
5.package镜像和artifact镜像
package包镜像,国内有中科大和浙大。参考
artifact镜像,可以设置为韩国新加坡或者个人搭建的artifact服务器。参考
https://discourse.juliacn.com/t/topic/2969/20
如在startup.jl中添加
ENV[“JULIA_PKG_SERVER”] = “https://blog.iyu.icu/myjuliapkgserver”
注意:设置PkgMirror只能解决pkg.add步骤问题。此时下载的仅是源码,这些文件一般较小。
设置PKgServer解决build时二进制依赖下载困难问题。
6.关于GR包安装
GR包add时会从github下载GR包的julia部分。build是会从aws s3服务器或者gr官网下载依赖的二进制底层库。该包尚未采用最新的artifact管理方式,因此目前不会从julia的atrifact服务器下载依赖的二进制gr库。
解决的办法之一,自行下载gr.tar.gz文件,并按照build.jl提示解压到GR包的deps/gr下。
7.本地安装。
julia对本地安装并不友好(依赖的包还需要从网络下载,仍然需要git同步包项目地址)。
Pkg.add(PackageSpec(url=“带git头的包文件夹”))
或者可考虑 ]dev 包文件夹
8. .julia文件夹的内容
9.conda相关
参考
综上
-
- update registry 同步慢 ----->使用国内镜像的gerneral
-
- Pkg.add 下载源码慢。-----> 使用PkgMIirror设置镜像
-
- pkg.build 下载依赖的二进制文件。-----> 设置PkgServer
实际上往往设置PkgServer就可以了。