PythonCall和PyCall包有什么区别?

同样作为Julia的调用外部程序工具包,PythonCall和PyCall包有什么区别?他们的关系是什么?截止2022年年初,推荐用哪个包?

PythonCall & JuliaCall包官方文档

PyCall包官方文档

PythonCall更新,但我没有使用过。细节的区别参见PythonCall的文档 Coming from PyCall?

阅读文档下来的感觉是,这个包在Python调用Julia的部分可能做得更好,但是Julia调用Python的部分有待实际操作验证。

1 个赞

PythonCall初步使用体验:

  1. 这个包默认需要和另一个包CondaPkg.jl配合起来使用。和PyCall不一样的一点是,PythonCall不提供面向系统内已经使用的Python的连接,而是单独在.julia/下面下载了一个独立的Conda。这样的好处是不需要操心和系统各个版本Python兼容的问题,缺点是额外又多了一个Python。PyCall既可以对接已有的Python版本,也可以独立安装Conda。如果不想另外装一个Conda而是使用已有的Conda,可以通过ENV["JULIA_PYTHONCALL_EXE"] = "python"; using PythonCall来对接Conda下的Python版本。
  2. 显然作者是觉得当前的PyCall不好用,所以自己另起炉灶搞了个新的。在设计上针对PyCall的一些问题有一些他的解决思路,并在类型转换中更加小心。
  3. CondaPkg这个包在安装诸如Matplotlib时依赖还存在一些Bug,但是给够时间和投入会做得很好。
  4. 明显地Python调用Julia的部分至少API JuliaCall比PyJulia更加清爽,可能问题也更少。
  5. PythonCall 目前无法实现Python文档的对接,比如PyPlot下可以想查看Julia函数帮助一样查看Python帮助。但这个问题以后肯定有办法解决的。

综合下来,我的建议是:如果你已经比较熟练Julia和Python中互调,尝试使用这个新的PythonCall和对应的JuliaCall;如果你刚上手,已有的PyCall生态更成熟。

1 个赞