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

问题描述

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

假设函数

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

从Python使用它的最好,最优雅的方法是什么?

解决方法

假设已安装Python和Julia,则需要执行以下步骤。

  1. 运行Julia并安装PyCall

    using Pkg
    pkg"add PyCall"
    
  2. 将您的代码放入Julia包

    using Pkg
    Pkg.generate("MyPackage")
    

    在文件夹src中,您会找到MyPackage.jl,对其进行编辑以使其看起来像这样:

    module MyPackage
    f(x,y) = 2x.+y
    export f
    end
    
  3. 安装pyjulia

    python -m pip install julia
    

    (在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/

  4. 运行适当的Python并告诉它配置Python-Julia集成:

    import julia
    julia.install()
    
  5. 现在您可以调用您的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]