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,里面给了几种解决方法,我试了试
好用的慢(跑个hello world竟要十几秒)
快的不好用(要把整个julia封装出一个动态库来)
看起来似乎可以解决但要改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被提的比较多的插件界面:
图 1.1 界面截图#
再加上它说"运行的很快",List从1开始数,结束用end (python是从0开始以-1结尾
这不就是没生态的matlab吗……
—我不禁感慨