在IPython笔记本中运行Julia代码的最佳方法(或IJulia笔记本中的Python代码)

Best way to run Julia code in an IPython notebook (or Python code in an IJulia notebook)

我的目标是在IPython笔记本中只运行几行Julia,其中大部分代码都是Python用于某些实验......

我在这里找到了一个很好的示例笔记

http://nbviewer.ipython.org/github/JuliaLang/IJulia.jl/blob/master/python/doc/JuliaMagic.ipynb

现在我想知道如何为Julia安装IPython扩展(我主要使用IPython 2.1),以便我可以通过

1
%load_ext julia.magic

我也是julia的新手,我想知道是否有"混合numpy和julia"的性能优势,如本笔记本所示(通过常规Python numpy或常规Julia代码)

当我正确理解这个概念时,如果我只对运行Julia代码感兴趣,我会使用IJulia笔记本(我成功设置)吗?

我安装了IJulia,我也可以运行IJulia笔记本,但实际上我只想在笔记本中加入一小部分Julia代码,其余的应该是Python / Cython。
不幸的是,我读到魔术函数还没有被完全支持:"与IPython的一个区别是IJulia内核目前不支持"magics",它是以%或%%为前缀的特殊命令,用于执行不同语言的代码"

有没有办法在IJulia笔记本中运行Python代码?


在IPython笔记本中运行Julia

为了在IPython笔记本中运行Julia片段(或其他语言),我只需将字符串'julia'附加到ScriptMagics类中的default类中的default列表中:

  • /usr/lib/python3.4/site-packages/IPython/core/magics/script.py
  • /usr/lib/python2.7/site-packages/IPython/core/magics/script.py

例:

1
2
3
4
5
6
7
8
9
10
11
12
# like this:
defaults = [
    'sh',
    'bash',
    'perl',
    'ruby',
    'python',
    'python2',
    'python3',
    'pypy',
    'julia', # add your own magic
]
  • 示例笔记本(使用Python3)

IPython *Julia magic*

朱莉娅魔术(双向)

要使用%load_ext julia.magic,您需要在此处运行setup.py

更新(2014年4月9日):setup.py文件已移至pyjulia.jl:

  • https://github.com/JuliaLang/pyjulia

<击>
Pkg.add("IJulia")克隆文件系统中的repo时,您会得到以下内容:

1
2
cd ~/.julia/v0.3/IJulia/python/
sudo python2 setup.py install

目前这仅适用于Python2。 Python3抱怨:

1
ImportError: No module named 'core'

当我尝试加载扩展时,但安装没有抱怨。

安装后,您也可以在Python2中执行此操作:

1
2
3
4
from julia import Julia
j = Julia()
arr = j.run('[1:10]')
type(arr) # numpy.ndarray
  • http://blog.leahhanson.us/julia-calling-python-calling-julia.html

从系统shell运行脚本

在笔记本单元格中使用shell模式语法:

1
!julia my_script.jl

在IJulia笔记本中运行Python

使用PyCall

它并不是真正在你想要的上下文中运行python代码,但你也可以在Julia中使用Python库:

1
2
3
using PyCall
@pyimport math
println(math.pi)
  • https://github.com/stevengj/PyCall.jl

从系统shell运行脚本

在笔记本单元格中使用shell模式语法:

1
;python my_script.py
  • http://julia.readthedocs.org/en/latest/manual/interacting-with-julia/?highlight=shell#shell-mode


如果你想运行一个只有julia的整个笔记本(或者你只从julia调用其他语言),那么有一个更清洁的解决方案。首先,启动julia并做

1
Pkg.add("IJulia")

获得IJulia包。然后你可以

1
ipython notebook --profile julia

并且您的笔记本将julia作为本机(默认)语言。

不是David Sanders和他用IPython笔记本写的优秀的julia教程;视频在这里。


另一种选择是使用Beaker。他们有一个混合R和Python的教程笔记本;使用Julia同样容易。


要完成这个好的答案,没有任何黑客攻击,并且没有修改任何系统文件,一个简单的解决方案就是使用%%script魔法:

1
2
3
In [1]: %%script julia
   ...: println("Hi from a Julia sub-process")
   ...: a = [1:10]

请小心细胞是在子进程中运行的,因此其余的IPython会话无法访问其中的任何内容:

1
2
3
4
5
6
7
8
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


这个笔记本中描述了一个干净漂亮的方法:https://github.com/binder-examples/julia-python/blob/master/python-and-julia.ipynb。

它强烈使用IPython魔术(%julia 在Python中内联,%%julia单元格),但结果令人印象深刻:两个Python和Julia进程可以使用相同的变量和内存。