从 R 或 Python 运行 .jl 文件

2022-01-23 00:00:00 python r julia

问题描述

我是 Julia 的新手.我开发了几行代码来从我无法在 Python 或 R 中找到的包中获得所需的结果.现在,我试图让这个文件易于访问,并将代码包装在 Python 或 R 中.有以前有人做过吗?我尝试了几种方法,但没有发现任何有用的方法.

I am new to Julia. I developed a few lines of code to get the results I needed from packages I was not able to find in Python or R. Now, I am trying to get this file to be easily accessible, and wrap the code in Python or R. Has anyone done this before? I have tried a few methods and have not found anything that has helped.

执行此操作的最简单方法是调用 .jl 文件并运行它(然后将代码从 julia 添加到 .txt 文件中),然后在代码出现时提醒您完成了.

The most simple way to do this would be just a few lines of code that calls the .jl file, runs it (which the code is then added to a .txt file from julia), and then alerts you when the code is done.

任何帮助将不胜感激.R 是更可取的方法,此时 Python 也会受到赞赏.

Any help would be greatly appreciated. R is the preferable method and at this point Python would be appreciated as well.


解决方案

请在下面找到 Python、R 和外部进程(当然是可以从任何其他进程运行的可执行命令)的说明.我建议将您的代码放在一个包中并以其中一种语言加载它,而不是将其作为外部进程执行.

Please find below instructions for Python, R and just an external process (which of course is an executable command that can be run from any other process). I recommend putting your code in a package and loading it in one of those languages rather than executing this as an external process.

  1. 使用 Python Anaconda(不是内置系统 Python)并安装 Julia

  1. Use Python Anaconda (not in-built system Python) and install Julia

运行 Julia 并安装 PyCall

Run Julia and install PyCall

using Pkg
ENV["PYTHON"]="/path/to/your/python/executable"
pkg"add PyCall"
pkg"build PyCall"

  • 将您的代码放入 Julia 包中

  • Put your code into a Julia package

    using Pkg
    Pkg.generate("MyPackage")
    

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

    In the folder src you will find MyPackage.jl, edit it to look like this:

    module MyPackage
    function main(x,y)
         #do very complex staff or place it in your_other_file.jl
         2x.+y
    end
    include("your_other_file.jl")
    export main, and_whatever_other_functio_you_defined
    end
    

  • 安装pyjulia

  • Install pyjulia

    python -m pip install julia
    

    (在 Linux 系统上,您可能希望使用 python3 而不是 python 命令)

    (On Linux systems you might want to use python3 instead of python command)

    对于这一步,请注意,虽然外部 Python 可以与 Julia 一起使用.但是,为了方便起见,它可能值得考虑使用与 Julia 一起安装的 Python 作为 PyCall.在这种情况下,使用这样的命令进行安装:

    For this step note that while an external Python can be used with Julia. However, for a convenience it might be worth to consider using a Python that got installed together with Julia as PyCall. In that case for installation use a command such this one:

    %HOMEPATH%.juliaconda3python -m pip install julia
    

    或在 Linux 上

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

    请注意,如果您定义了 JULIA_DEPOT_PATH 变量,您可以将 %HOMEPATH%.julia~/.julia/ 替换为其值.

    Note that if you have JULIA_DEPOT_PATH variable defined you can replace %HOMEPATH%.julia or ~/.julia/ with its value.

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

    Run the appropiate Python and tell it to configure the Python-Julia integration:

    import julia
    julia.install()
    

  • 现在你可以调用你的 Julia 代码了:

  • Now you are ready to call your Julia code:

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

  • Gnu R

    1. 配置您的系统 PATH 变量以指向您的 Julia 位置.因此,当您在控制台中键入 julia 时,它应该启动 Julia

    1. Configure your system PATH variable to point to your Julia location. Hence when you type julia in the console it should start Julia

    运行下面的脚本来安装 R-Julia 集成

    Run the script below to install R-Julia integration

    install.packages("JuliaCall")
    
    library(JuliaCall)
    julia <- julia_setup()
    

    1. 按照上述 Python 说明(仅限第 3 步)并创建名为 MyPackage

    运行代码

    library(JuliaCall)
    julia_eval("using Pkg;Pkg.activate("C:/temp/rrr/MyPackage")")
    julia_library("MyPackage")
    
    julia_eval("MyPackage.main(3,5)")
    

    Bash(或任何语言)

    1. 按照 Python 说明构建包(仅限第 3 步)

    1. Build the package following instructions for Python (step 3 only)

    配置系统PATH变量

    在包目录中运行命令(注意 string(:.) 是一个 Julian 技巧,我用它来避免 bash 命令中的撇号转义):

    Being in the package directory run the command (note string(:.) is a Julian trick that I use to avoid apostrophe escaping in bash commands):

    julia -e "using Pkg;Pkg.activate(string(:.));Pkg.instantiate();using MyPackage;MyPackage.main(3,4)"
    

    这将为您的包安装所有依赖项.为了跳过安装,请从上述命令中删除 Pkg.instantiate().

    This will install all dependencies for your package. In order to skip the installation remove Pkg.instantiate() from the above command.

    相关文章