我有一个用Julia编写的高性能函数,如何在Python中使用它?

svujldwt  于 2022-12-28  发布在  Python
关注(0)|答案(1)|浏览(163)

我找到了一个Julia函数,它很好地完成了我需要的工作。我如何快速集成它,以便能够从Python中调用它?
假设函数为

f(x,y) = 2x.+y

在Python中使用它的最佳和最优雅的方式是什么?

cyvaqqii

cyvaqqii1#

假设你的Python和Julia已经安装,你需要采取以下步骤。
1.运行Julia并安装PyCall

using Pkg
pkg"add PyCall"

1.将您的代码放入Julia包

using Pkg
Pkg.generate("MyPackage")

在文件夹src中,您将找到MyPackage.jl,将其编辑为如下所示:

module MyPackage
f(x,y) = 2x.+y
export f
end

1.安装pyjulia

python -m pip install julia

(On Linux系统,您可能希望使用python3而不是python命令)
在这一步中,请注意,虽然外部Python可以与Julia一起使用。但是,为了方便起见,可能值得考虑使用与Julia一起安装的Python PyCall。在这种情况下,请使用如下命令进行安装:

%HOMEPATH%\.julia\conda\3\python -m pip install julia

或在Linux上

~/.julia/conda/3/python -m pip install julia

请注意,如果定义了JULIA_DEPOT_PATH变量,则可以用其值替换%HOMEPATH%\.julia~/.julia/
1.运行适当的Python并告诉它配置Python-Julia集成:

import julia
julia.install()

1.现在,您可以调用Julia代码了:

>>> from julia import Pkg
>>> Pkg.activate(".\\MyPackage") #use the correct path
    Activating environment at `MyPackage\Project.toml`
>>> from julia import MyPackage
>>> MyPackage.f([1,2],5)
    [7,9]

值得注意的是,这个答案中提出的方法与独立Julia文件相比有几个优点,尽管不太推荐,但这是可能的。
1.包被预编译(因此在后续运行中速度更快),并且可以作为Python中的一个包加载。
1.包通过1Project.toml '自带了自己的虚拟环境,这使得生产部署更加方便。

  1. Julia软件包可以静态编译成Julia的系统映像,这样可以减少其加载时间---参见https://github.com/JuliaLang/PackageCompiler.jl

编辑

在2022年2月juliacallannounced,截至2022年12月juliacall可能是一个更容易的选择对一些用户-看看:How to load a custom Julia package in Python using Python's juliacall

相关问题