28

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

假设函数是

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

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

4

1 回答 1

33

假设您的 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]
    

值得注意的是,这个答案中提出的方法与独立的 Julia 文件相比有几个优点,虽然不太推荐,但这是可能的。优点包括:

  1. 包被预编译(因此它们在后续运行中更快)并且可以在 Python 中作为包加载。
  2. 包通过 1Project.toml 带有自己的虚拟环境,这使得生产部署更加舒适。
  3. Julia 包可以静态编译到 Julia 的系统映像中,这可以缩短其加载时间 --- 请参阅https://github.com/JuliaLang/PackageCompiler.jl
于 2020-10-07T09:36:55.757 回答