从R或Python运行.jl文件

mlmc2os5  于 2022-12-20  发布在  Python
关注(0)|答案(3)|浏览(222)

我是Julia的新手。我开发了几行代码来从Python或R中找不到的包中获取所需的结果。现在,我正在尝试让这个文件更容易访问,并用Python或R Package 代码。以前有人这样做过吗?我尝试了一些方法,但没有找到任何有用的方法。
最简单的方法就是用几行代码来调用.jl文件,运行它(然后将代码添加到julia的一个.txt文件中),然后在代码完成时提醒您。
任何帮助都将非常感谢。R是更好的方法,在这一点上Python也将受到感谢。

6l7fqoea

6l7fqoea1#

下面是Python、R和一个外部进程(当然是一个可以从任何其他进程运行的可执行命令)的说明。我建议把你的代码放在一个包中,然后用这些语言之一加载它,而不是作为一个外部进程来执行它。

巨蟒

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

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

1.将您的代码放入Julia包

using Pkg
Pkg.generate("MyPackage")

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

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

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.main([1,2],5)
    [7,9]

Gnu R

1.将系统变量PATH配置为指向Julia位置。因此,当您在控制台中键入julia时,它应该会启动Julia
1.运行以下脚本以安装R-Julia集成

install.packages("JuliaCall")

library(JuliaCall)
julia <- julia_setup()

1.按照上述Python说明(仅步骤3)创建名为MyPackage的包
1.运行代码

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.配置系统PATH变量
1.在包目录中运行命令(注意string(:.)是Julian的一个技巧,我使用它来避免bash命令中的撇号转义):

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

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

rnmwe5a2

rnmwe5a22#

@przemyslaw-szufel给出的答案是正确的,但是可能有点过于复杂了,你不一定需要把代码 Package 在一个模块中或者定义一个自定义环境(是的,这是一个很好的实践,但是在当时只是一个步骤......)
首先创建一个包含以下内容的文件juliaScripts.jl

function getAnElement(array,n)
    return array[n]
end

在R中运行.jl文件中定义的函数

那么在R中你只需要:

> install.packages("JuliaCall")
> library(JuliaCall)
> julia_setup() # on every new R session !
> julia_source("juliaScript.jl")
> out <- julia_call("getAnElement",c(10,20,30),2)
> out
[1] 20

请注意,R向量已自动转化为Julia阵列。

在Python中运行.jl文件中定义的函数

在Python中,这就更简单了:

$ python3 -m pip install --user julia
>>> import julia
>>> julia.install() # only once, not every session
>>> jl=julia.Julia(compiled_modules=False)
>>> from julia import Main
>>> Main.include("juliaScript.jl")
>>> Main.getAnElement([1,2,3],2)
20

同样在Python中,数组(原生的Python列表、Numpy数组和其他常用的数据结构)会在Python和Julia之间自动转换。
我不想做广告,但关于连接R <->Julia或Python <->Julia的更多细节,请参见我的Apress(2019)书《Julia Quick Syntax reference》第7章“连接Julia与其他语言”(我不应该说,但你可以很容易地在知名网站上在线找到PDF格式......)

gg58donl

gg58donl3#

使用JuliaConnectoR package

library(JuliaConnectoR)
fun <- juliaCall("include", "/path/to/file.jl") # you may need to provide the full path

有关JuliaConnectoR的更多信息,请参见上面的链接以及this paper,其中还将其与替代包进行了比较,如JuliaCall和XRJulia。

相关问题