1. Julia初尝试#

写于2023年11月1日

最近,因为读到的多篇论文都把自己的工作代码写在了Julia里,为了复现其中的结果,我便尝试了使用julia来运行他们的程序以复现结果。总体来看,julia还稍显稚嫩,很多可以有或者应该有的功能没有很好的适配。我暂时认为,不到很有必要的时候不会主动写julia.

另外,这也是我第一次写这种博文一类的记录。之前这个博客虽然说是博客,内容倒是太不放松,成了说明书。现在写一些这种“没这么规整的”,倒挺好。

安装#

julia的安装相当的简单,其可执行文件和库都打包在同一个压缩包里,只需要将可执行文件的目录加入$PATH环境变量就行。推荐的也是这样做。应该把可执行文件软连接到某些bin/文件夹里也是可以的。

hello world#

新建一个程序test.jl

内容为

println("Hello World!")

注意julia的字符串只能用"(双引号)括起来,不能用单引号,关于julia和python的差别可以看这个网址

执行

julia test.jl

和python联动#

因为我自己目前主要使用的编程程序是python,工作中写的几个程序也是基于python,就寻思着把它们联系起来,也好相互调用或者对比。查找到有个python库叫做pyjulia,不过试了下之后放弃了。过程如下:

安装pyjulia#

使用了这个官方文档来安装,其中第一步julia我已经装好了,第二步直接

pip install julia

说明书上说要加--user,这是全局的python安装给指定的用户。我是在conda环境里装的python,因此不需要这个参数。

第三步实际上是要在Julia里安装一个叫做PyCall的库。

从python安装的办法是

import julia
julia.install()

不过不知道为啥会卡住,我猜测和源有关。于是我尝试了另一个办法,在julia的REPL里:

using Pkg
Pkg.add("PyCall")

这个也会卡,但是换源比较方便,找到julia解压的文件目录里的etc/startup.jl,增加一行

ENV["JULIA_PKG_SERVER"]="https://mirrors.pku.edu.cn/julia/"

这个文件类似于bashrc,启动julia就会执行,相当于加载了一个环境变量。

然后我就可以安装并运行了。

测试pyjulia#

我的需求也比较简单,就是要在python中能顺畅的执行julia的脚本并返回结果。所以只要能在python里运行刚刚写好的test.jl就行了。

一个标准的做法是

from julia import Julia
jl = Julia()
jl.eval('include')('test.jl')

结果就报错了,内容是

错误

Your Python interpreter "/home/cxwu/software/miniconda3/envs/pyjulia/bin/python" is statically linked to libpython. Currently, PyJulia does not fully support such Python interpreter.

大致的意思是,我的python不行,不行的原因可能是我用的是Debian类内核(我Ubuntu直接躺枪),或者用了conda环境(难怪它的说明书前面叫我--user,原来伏笔在这儿……)总之,我两枪全中,已经倒了。

最后的挣扎#

看了看Troubleshooting,里面给了几种解决方法,我试了试

  1. 好用的慢(跑个hello world竟要十几秒)

  2. 快的不好用(要把整个julia封装出一个动态库来)

  3. 看起来似乎可以解决但要改python环境而我懒就放弃了的。

总之,尝试用python调用julia似乎还是为时过早,那么就单独的跑julia吧。

Julia in Jupyter Notebook#

  • 打开jupyter notebook的网页端,如果在本地有合理安装julia的话,可以改内核为julia,然后就可以跑了。

  • 12023年11月9日. 今天突然发现可以在vscode里直接选择julia的内核了. 这无疑增加了它的好用性。
  • 在vscode里新建.ipynb文件,发现没法选择julia的内核。12023年11月9日. 今天突然发现可以在vscode里直接选择julia的内核了. 这无疑增加了它的好用性。

备注

我已经很久没用过网页端的notebook了,虽然我其实就不怎么用notebook,不过偶尔写个example还是很有用的,没想到它连vscode inside的notebook都不支持……要知道,julia目前是把vscode当成自己的第一编译器的。

结语#

简单检查了一下各个功能,我的感觉就是“可以,但没必要……”,打开julia被提的比较多的插件界面:

../../../_images/ui.png

图 1.1 界面截图#

再加上它说"运行的很快",List从1开始数,结束用end (python是从0开始以-1结尾

这不就是没生态的matlab吗……

—我不禁感慨