#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
- Используйте Python Anaconda (не встроенный системный Python) и установите Julia
- Запустите Julia и установите
PyCall
using Pkg ENV["PYTHON"]="/path/to/your/python/executable" pkg"add PyCall" pkg"build PyCall"
- Поместите свой код в пакет 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
- Установить 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/
ее значением. - Запустите соответствующий Python и сообщите ему, чтобы он настроил интеграцию Python-Julia:
import julia julia.install()
- Теперь вы готовы вызвать свой код 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
- Настройте свою системную
PATH
переменную так, чтобы она указывала на ваше местоположение Julia. Следовательно, когда вы вводитеjulia
текст в консоли, он должен запускать Julia - Запустите приведенный ниже скрипт, чтобы установить интеграцию с R-Julia
install.packages("JuliaCall")
library(JuliaCall)
julia <- julia_setup()
- Следуйте приведенным выше инструкциям для 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 (или просто любой язык)
- Создайте пакет, следуя инструкциям для Python (только шаг 3)
- Настройка системной
PATH
переменной - Находясь в каталоге пакета, запустите команду (обратите
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 в Интернетена известных сайтах …)