Запуск файла .jl из R или Python

#python #r #julia

#python #r #джулия

Вопрос:

Я новичок в Джулии. Я разработал несколько строк кода, чтобы получить нужные мне результаты из пакетов, которые я не смог найти в Python или R. Теперь я пытаюсь сделать этот файл легкодоступным и обернуть код в Python или R. Кто-нибудь делал это раньше? Я перепробовал несколько методов и не нашел ничего, что помогло.

Самым простым способом сделать это было бы всего несколько строк кода, который вызывает файл .jl, запускает его (затем код добавляется в файл .txt от julia), а затем предупреждает вас о завершении кода.

Буду признателен за любую помощь. R является предпочтительным методом, и на данный момент Python также будет оценен.

Комментарии:

1. Смотрите пакет JuliaCall: cran.r-project.org/web/packages/JuliaCall/index.html

2. если у вас есть полный скрипт julia, который можно запускать и выводить на диск, то вы можете просто выполнить system вызов из R или python, вызвав интерпретатор julia для этого скрипта julia.

3. И есть PyJulia для python: pyjulia.readthedocs.io/en/latest/usage.html

4. @nicola можете ли вы дать мне пример R-кода для вызова файла .jl?

5. Томас: system("your_command_line goes_here")

Ответ №1:

Пожалуйста, найдите ниже инструкции для Python, R и просто внешнего процесса (который, конечно, является исполняемой командой, которую можно запустить из любого другого процесса). Я рекомендую поместить ваш код в пакет и загрузить его на одном из этих языков, а не выполнять это как внешний процесс.

Python

  1. Используйте Python Anaconda (не встроенный системный Python) и установите Julia
  2. Запустите Julia и установите PyCall
     using Pkg
    ENV["PYTHON"]="/path/to/your/python/executable"
    pkg"add PyCall"
    pkg"build PyCall"
     
  3. Поместите свой код в пакет 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
     
  4. Установить pyjulia
     python -m pip install julia
     

    (В системах Linux вы можете использовать python3 вместо python command)

    Для этого шага обратите внимание, что в то время как внешний Python можно использовать с Julia. Однако для удобства, возможно, стоит рассмотреть возможность использования Python, который был установлен вместе с Julia as PyCall . В этом случае для установки используйте команду, подобную этой:

     %HOMEPATH%.juliaconda3python -m pip install julia
     

    или в Linux

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

    Обратите внимание, что если у вас JULIA_DEPOT_PATH определена переменная, вы можете заменить %HOMEPATH%.julia or ~/.julia/ ее значением.

  5. Запустите соответствующий Python и сообщите ему, чтобы он настроил интеграцию Python-Julia:
     import julia
    julia.install()
     
  6. Теперь вы готовы вызвать свой код Julia:
     >>> 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
  2. Запустите приведенный ниже скрипт, чтобы установить интеграцию с R-Julia
 install.packages("JuliaCall")

library(JuliaCall)
julia <- julia_setup()
 
  1. Следуйте приведенным выше инструкциям для Python (только шаг 3) и создайте пакет с именем MyPackage
  2. Запустите код
 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)
  2. Настройка системной PATH переменной
  3. Находясь в каталоге пакета, запустите команду (обратите string(:.) внимание на трюк Джулиана, который я использую, чтобы избежать экранирования апострофа в командах bash):
 julia -e "using Pkg;Pkg.activate(string(:.));Pkg.instantiate();using MyPackage;MyPackage.main(3,4)"
 

Это установит все зависимости для вашего пакета. Чтобы пропустить установку, удалите Pkg.instantiate() из приведенной выше команды.

Комментарии:

1. Можете ли вы уточнить: если не выполняется какой-либо код на Python, можно R ли выполнять Julia команды и .jl файлы без необходимости python или anaconda ?

2. Вам не нужен Python. Ссылка была только на пункт 3 инструкций Python -> объяснение, как поместить ваш код Julia в пакет. Я отредактировал ответ

Ответ №2:

Ответ от @przemyslaw-szufel правильный, но, возможно, немного усложненный. Вам не обязательно заключать свой код в модуль или определять пользовательскую среду (да, это хорошая практика, но шаг в то время …)

Сначала создайте файл juliaScripts.jl с содержимым:

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

 

Для запуска функций, определенных в файле .jl в R

Затем в 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.

Для запуска функций, определенных в файле .jl на Python

В 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» в главе 7 «Взаимодействие Julia с другими языками» (я не должен этого говорить, но вы можете легко найти pdf в Интернетена известных сайтах …)