[julia]本地离线安装package
1.引言
julia最近十分受关注,其结合了python的通用性,Ruby的动态性,C的代码运行速度,R的包管理和数据分析功能,perl的字符串处理能力,lisp的宏能力,matlab的矩阵计算规则,fortran的矩阵计算速度,shell的不同程序粘粘能力。可谓是集众家之所长,当下就试了一把,不过还是觉得pip的包管理十分方便,暂时不是很习惯R的包管理方式。
julia将所有的包依赖github进行管理,而不是如pypi一样建立个独立的网站,其中包含了所有注册的包(你写的包被官方收录)的元数据General,以及几乎所有2261个包都是在github上。当然这给生产环境等无法联网的机器带来了不小的麻烦。这里经过试验和查找stackoverflow等方式,算是找到了几个解决方法。
下面主要在centos 7.3,julia 1.0版本上进行实现。
2. 在线安装
using Pkg
Pkg.add("Example")
是不是很方便,而且自动解决依赖,而且一行就能更新所有的包版本
3. 先离线安装General,然后离线安装其他包
3.1 如果机器能代理上网
如果你的机器是需要通过代理上网的,那么会需要设定http_proxy,https_proxy等,然而当爆出
可以尝试
export https_proxy=http://192.168.71.33:8080
即给https附加http的代理。然后采用之前的在线安装方式直接安装,美滋滋。
3.2 机器都不能联网
如果也不能联网,那么首先找到所需要的包,如General:
1 - 先找一台能上网的机器
git clone https://github.com/JuliaRegistries/General.git
ps:不要直接github上打包的方式下下来,因为这样里面缺少了.git等元数据信息
2 - 将包放入指定位置
如在Pkg模式(按下 ] 这个按键,表示进入Pkg模式,退出可以直接ctrl+c)下直接输入
add General
可以看出,julia的默认路径是~/.julia。当安装完成时,会有如下的目录结构
如果当前为空,则先建立registries,然后将之前github上下载的General包放在~/.julia/registries下面
然后:
成功!
3.3 离线安装其他包
上述我们成功安装了General,为什么先安装它,是因为看到直接在线安装时,都是需要去更新这个包,所以里面也包含了所有的元数据信息。那么现在有疑问了:
- 我想安装其他包怎么办?
- 我包有依赖怎么办?
这里有至少2个方法,第一个方法如安装General一样:
3.3.1 类似General方式安装其他包
首先,解决怎么安装其他包问题,这里以Example为例
1 - 将Example以git clone下载
2 - 将该下载的文件夹放到~/.julia/registries
3 - 在Pkg模式下直接安装如下图
解决。
3.3.2 直接修改General中的包源地址
这里依然以Example为例
可以看出,在/root/.julia/registries/General下面包都是按照首字母进行存储的,我们直接定位到Example中
找到Package.toml
手动将里面的repo改成你自己本地包的路径(这个Example也是通过git clone下载的)
然后回到Pkg模式下
可以看到成功了,
那么如果你有依赖,你可以全都下下来,然后修改General中的位置(用个python批量修改下,我觉得不难),直接让他本地寻找即可!这里我就没再试了,后续遇到接着更新