Лучший способ запуска кода Julia в ноутбуке IPython (или код Python в ноутбуке IJulia)
Моя цель - запустить только несколько строк Джулии в ноутбуке IPython, где большая часть кода будет Python для некоторых экспериментов...
Я нашел здесь приятный пример ноутбука:
http://nbviewer.ipython.org/github/JuliaLang/IJulia.jl/blob/master/python/doc/JuliaMagic.ipynb
И теперь мне интересно, как я буду устанавливать расширение IPython для Julia (я в основном использую IPython 2.1), чтобы загрузить его через
%load_ext julia.magic
Я также очень новичок в julia, и мне интересно, есть ли преимущество в производительности "mix numpy and julia", как показано в этом ноутбуке (с помощью обычного Python numpy или обычного кода Julia).
Когда я правильно понимаю концепцию, я бы использовал записные книжки IJulia (которые я установил успешно), если меня интересует только код Julia?
Я установил IJulia, и я также могу запускать ноутбуки IJulia, но на самом деле я хотел только иметь небольшую часть кода Julia в своем ноутбуке, остальное должно быть Python/Cython.
К сожалению, я читал, что магические функции еще не полностью поддерживаются: "Одно отличие от IPython заключается в том, что ядро IJulia в настоящее время не поддерживает" магию ", которые являются специальными командами с префиксом% или %% для выполнения кода на другом языке"
Есть ли способ запустить код Python в ноутбуках IJulia?
Ответы
Ответ 1
Запустите Джулию внутри ноутбука IPython
Hack
Чтобы запустить фрагменты Джулии (или другой язык) внутри ноутбука IPython, я просто добавляю строку 'julia'
в список default
в методе _script_magics_default
из ScriptMagics
класс в:
-
/usr/lib/python3.4/site-packages/IPython/core/magics/script.py
или
-
/usr/lib/python2.7/site-packages/IPython/core/magics/script.py
.
Пример:
# like this:
defaults = [
'sh',
'bash',
'perl',
'ruby',
'python',
'python2',
'python3',
'pypy',
'julia', # add your own magic
]
![IPython *Julia magic*]()
Юля Магия (двунаправленная)
Чтобы использовать %load_ext julia.magic
, вам нужно запустить setup.py
здесь:
Обновление (09/04/2014): файл setup.py
перенесен в pyjulia.jl:
Что вы получаете, когда Pkg.add("IJulia")
клонирует репо в вашей файловой системе:
cd ~/.julia/v0.3/IJulia/python/
sudo python2 setup.py install
Забастовкa >
В настоящее время это работает только для меня в Python2. Python3 жалуется:
ImportError: No module named 'core'
когда я пытаюсь загрузить расширение, но устанавливает без жалоб.
После его установки вы также можете сделать это изнутри Python2:
from julia import Julia
j = Julia()
arr = j.run('[1:10]')
type(arr) # numpy.ndarray
Выполнение script из вашей системной оболочки
Используйте синтаксис режима оболочки в ячейке ноутбука:
!julia my_script.jl
Запустите Python внутри ноутбука IJulia
Использование PyCall
На самом деле это не работает код python в нужном вам контексте, но вы также можете использовать библиотеки Python изнутри Julia:
using PyCall
@pyimport math
println(math.pi)
Выполнение script из вашей системной оболочки
Используйте синтаксис режима оболочки в ячейке ноутбука:
;python my_script.py
Ответ 2
Другой вариант - использовать Beaker. У них есть учебный ноутбук, который смешивает R и Python; использование Джулии так же просто.
Ответ 3
Если вы хотите запустить целый блокнот только julia (или там, где вы называете другие языки только из julia), тогда есть более чистое решение. Сначала запустите julia и сделайте
Pkg.add("IJulia")
чтобы получить пакет IJulia. Тогда вы можете
ipython notebook --profile julia
и ваш ноутбук будет иметь julia как родной (по умолчанию) язык.
h/t Дэвиду Сандерсу и его отличным учебникам julia, которые написаны на IPython-ноутбуках; здесь.
Ответ 4
Чтобы завершить этот хороший ответ, без каких-либо взломов и без изменения какого-либо системного файла простое решение с волшебство %%script
:
In [1]: %%script julia
...: println("Hi from a Julia sub-process")
...: a = [1:10]
Будьте осторожны с тем, что ячейка была запущена в подпроцессе, поэтому все, что было сделано в ней, не доступно остальной частью сеанса IPython:
In [2]: print("Hi from the main IPython process")
...: print(a) # <-- not available from the Julia code, will fail !
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-2-c5a4f3535135> in <module>()
----> 1 print(a)
NameError: name 'a' is not defined
Ответ 5
В этом ноутбуке описан чистый и приятный метод: https://github.com/binder-examples/julia-python/blob/master/python-and-julia.ipynb.
Он сильно использует магию IPython (%julia <julia code>
inlined в ячейках Python и %%julia
), но результат впечатляет: два процесса Python и Julia могут использовать одни и те же переменные и память.