jvc (Julia version control) 可以考虑为 jill.sh 的 heavy 版,jill (Julia installer 4 Linux Light). 目前只针对 Linux 系统的安装。
为什么有了jill.py 和 jill.sh 我还想写一个纯shell的?
我想用尽量少的依赖来做这件事情 (不想要pip…先有python后有Julia?(虽然大部分Linux发行版已经预装python了)
jill.sh对于版本的控制略有不足。
我想更灵活的切换版本?(Julia非常迅速,版本迭代快,有时候希望能快速切换版本,因为多次碰到小版本之间翻车的经历…)
更为激进的IonCli.jl ,直接使用了binary,暂时体积较大。
安装和自定义配置:
git clone
下来到你喜欢的地方,比如~/.jvc
git clone https://github.com/songxianxu/jvc ~/.jvc
对你的shell rc文件(.bashrc
或 .zshrc
)添加环境变量
export PATH=$PATH:~/.jvc:~/.local/bin/jvc/
第二个路径~/.local/bin/jvc/
是针对julia的symlink的路径,如果没有在.jvcrc
中修改则无需修改。
如果你想自定义下载路径,安装路径,可以修改.jvcrc
文件中的环境变量
JULIA_DOWNLOAD_DIR
下载Julia安装文件的文件夹
JULIA_INSTALL_DIR
Julia的安装文件夹
JULIA_SYMLINK_DIR
Julia的符号链接路径
UPSTREAM_NAME
Upstream的名称,一般无需手动设置,直接通过jvc upstream
调整。
安装Julia
jvc install # 默认安装最新的稳定版 (现在是1.5.3)
jvc install 1 # 默认安装major版本1的最新版(也是1.5.3)
jvc install 1.5 # 现在还是 1.5.3
jvc install 1.5.3
jvc install 1.6.0 # 安装1.6.0 (但现在是rc)
jvc install 1.6.0-rc1
jvc installed # 列出所有已安装的版本
仅下载安装文件
jvc download [版本号]
加载/移除某个版本的符号链接
jvc load 1.5.3
这样julia-1.5.3
就可以使用了
jvc unload 1.5.3
让julia-1.5.3
不可见 (并不是卸载)
jvc loaded
显示所有已加载
切换主版本
jvc switch 1.5.3
让julia
符号链接使用julia 1.5.3
即命令行中输入julia
直接使用1.5.3
移除所有符号链接 (除julia
)
jvc purge
由于每次安装都默认加载符号链接,如果安装过多版本,可能会想移除。(移除所有诸如julia-x.y.z等)
安装nightly
jvc nightly
以后可能会考虑合并到jvc install nightly
显示状态
jvc status
显示安装的,加载的,下载的,还有upstream
搜索版本
jvc search [x.y.z]
查询所有可以安装的版本
jvc avail/available
jvc avail all
包括rc和beta
卸载某个版本的Julia
jvc remove
会列出已安装版本供卸载。
Julia版本移植 (升级)
jvc migrate 1.5 to 1.6
会复制 Project.toml
和 Manifest.toml
到对应版本的环境目录
移植前会先比较对应Project.toml
切换下载源
jvc upstream
也许你会需要切换下载源…
源信息记录在upstream.conf
里
最初直接查询jill.py
中的sources.json
但万万没想到…github的rawfile似乎经常无法访问。
结语
几个相关的项目
7 个赞
有没有可能兼容 Windows ?
更现实地说,基于 Powershell 脚本做个类似的?(甚至兼容安装了powershell的非Windows系统)
之所以写 jill.py 就是因为我的shell能力无法驾驭这种超长的脚本… 所以做了这样一个取舍… 另外考虑到用 python 的话也可以直接支持 windows…
另,Julia官方提供一个 https://julialang-s3.julialang.org/bin/versions.json 可以用来查询版本,各个镜像站也有同步,用这个的话可能会更可靠一些?似乎jvc目前是查询github的样子。
1 个赞
我对于Windows上的使用Julia开发的流程没有什么概念…对Powershell也不是很熟,感觉需求不是特别大?而且Windows下更好的选择可能是 jill.py ?
如果要兼容Windows可能最有可能的是考虑基于msys2的兼容…这样不需要完全重写个Powershell版的。
WSL下jvc应该是可以用的,还没有深度测试过。
Mac理论上是可以直接兼容的。但是Mac上的安装还没搞懂 (似乎是hdimount?) (没有Windows和Mac的开发环境…所以这些测试都没做)
之所以写 jill.py 就是因为我的shell能力无法驾驭这种超长的脚本… 所以做了这样一个取舍… 另外考虑到用 python 的话也可以直接支持 windows…
我的shell也写的不好…写的时候很多都是边查编写…比如现在的arguments都没有用到shift…现在的confirm也没有默认Yes… (不过写完shell之后真的 可以极大增加写Julia的幸福感…)
另,Julia官方提供一个 https://julialang-s3.julialang.org/bin/versions.json 可以用来查询版本,各个镜像站也有同步,用这个的话可能会更可靠一些?似乎jvc目前是查询github的样子。
主要的查询用的是官方的versions.json…
除了一个情况…就是jvc install
默认安装最新的stable的情况。
这个是查询了github的release tag…(之后我也更改下…)
其他的都是使用官方的versions.json. (之后应该会根据upstream一起替换)
另,好像社区里用 asdf 的也挺多的。
之前也考虑了用类似的工具,但是写的时候最开始的想法就是提供最少的依赖…
比如没有选择用 jq
来处理 json 文件 (因为很多系统没有预装)
如果有可能最好连 .jvcrc
和 upstream.conf
也不要,upstream.conf
本来是没有的…直接查询了 jill.py 的sources.json…但是 github raw 文件的访问似乎不稳定…
1 个赞
我这是基于Nix GitHub - GTrunSec/learn-julia: A well-thought-out preset environment can help you learn the julia language specifically 实现的julia版本和包依赖的使用,可以云部署复现支持direnv。但目前就是没写好的readme,方式比较hack.(支持macos 和linux安装有nix的机器。)
目前,我这个环境是部署了pluto锁了相应deps julia pkgs环境,开放给一些学生用户和自己使用的。
注意:目前我的环境对别人其实是相当不友好的,这里仅仅是一个展示说明。
1 个赞
不是很了解…Nix,给我的感觉是 可以打包了一个独立的julia环境通过Nix派发?
可以这么讲,是通过完全Nix构建的完全独立的环境。包括julia或者依赖环境都是要在当前的架构平台x86 darwin aarch64进行源码编译,生成hash的。如果对特定或者master版本都是随时可以编译。而且对julia deps每个包的project arts也进行了hash的锁定构建,每个环境都是唯一的解析成packages.nix
去下载构建。
目前我的环境是 cd 到每个包含有project.toml Manifest.toml的dir自动activate 当前的包和julia版本,并且run pluto也可以得到相似的环境。
只要一台相同平台下构建成功,其他机器如果使用相同的包环境和julia版本是直接可以拉去编译缓存和下载缓存。
对于我Repo的环境使用也仅仅需要1-2条简单的命令就可以,但是 如果你想后期自己修改各种版本,就需要一个我去写一个README去说明了。
这样对应的用户群体似乎限定于使用 Nix 用户了?虽然 Nix 的概念 (哲学) 看起来的确很有意思(准备试试),只是这和我初衷似乎不太一样。。。
很多用户和shell版本依赖各种管理都是基于传统管理和解决,但这个也是主流。Nix只是管理和部署更加先进的方式,至于你说的限定于Nix用户其实不然,Nix只是个包管理类似pcam apt-get docker综合等等。更多的时间花费和维护是我这种maintainer去做的去写框架测试等等,对于普通用户来讲,甚至第一次接触NIx的只要写好README,简简单单一条命令就可以使用了。
我这里说明一下,jill.sh这类方式依然是主流,但我解决的是更加复杂,稳定,可控,可复现的整个develop julia环境,无论是新手和还是老手,
都可以直接拿来用,或者部署。
我录制了一效果
1 个赞
因为Nix种种机制,如sandbox每次生成都是唯一hash且不能修改。任何版本的切换和修改都需要重新编译生成,而且各种独立复杂依赖都及其不友好。
所以我不建议别人去使用我的环境,在没有好的README的情况下。这里仅仅是一个展示和讨论。
我Repo初步面向用户,是想学Julia的学生或者其他群体。因为整个的封装环境对这些群体非常有好,甚至(activate “DIR” add(“PKGS”) apt-get julia) 什么都不用做,一条命令就可以得到一个完美的环境。
当然如果有人帮助我去写一个有好的README,那就是另外一回事情。其次若每次修改Julia版本就意味着要重新编译一次,如果没有CI或者binary cache的提供,对用户也是麻烦事情。
Turner
2021 年3 月 17 日 01:58
13
以后可能会考虑合并到jvc install nightly
现在 jvc switch nightly
还不能用?
是的,jvc swtich nightly
暂时是没法用的 (今晚之后应该可以…)。之前我没有考虑会有人想把 nightly 版本link到 julia
这个 alias… 还有个原因是nightly游离在官方versions.json之外,所以写的时候是直接分开了。
感谢解释。这个大概就是我的意思,这个 repo 解决的问题更像是快速部署一个包括了 binary 和 package 的 demo 环境。。但是在没开始尝试Nix前,可能没法评论更多…另外 Nix 对 Windows 似乎也只能在 WSL上?