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批量修改下,我覺得不難),直接讓他本地尋找即可!這里我就沒再試了,后續遇到接着更新