在IPython笔记本中运行Julia代码的最佳方法(或在IJulia笔记本中运行Python代码)
我的目标是在一个IPython笔记本中只运行几行Julia代码,而大部分代码还是Python,用于一些实验……
我在这里找到了一个不错的示例笔记本:
http://nbviewer.ipython.org/github/JuliaLang/IJulia.jl/blob/master/python/doc/JuliaMagic.ipynb
现在我想知道如何为Julia安装IPython扩展(我主要使用的是IPython 2.1),这样我就可以通过下面的方式加载它:
%load_ext julia.magic
我对Julia也很陌生,想知道在这个笔记本中展示的“混合使用numpy和julia”是否比普通的Python numpy或普通的Julia代码更有性能优势。
如果我理解得没错的话,如果我只想运行Julia代码,我应该使用IJulia笔记本(我已经成功设置了)。
我安装了IJulia,也可以运行IJulia笔记本,但我其实只想在我的笔记本中放一小部分Julia代码,其余的应该是Python/Cython。可惜的是,我读到魔法函数还没有完全支持:“与IPython的一个不同之处在于,IJulia内核目前不支持‘魔法’命令,这些命令以%或%%开头,用于在不同语言中执行代码。”
有没有办法在IJulia笔记本中运行Python代码呢?
5 个回答
这个笔记本里介绍了一种干净又好用的方法:https://github.com/binder-examples/julia-python/blob/master/python-and-julia.ipynb。
它主要使用了IPython的魔法命令(比如在Python中直接插入的%julia <julia 代码>
和%%julia
单元格),效果非常不错:Python和Julia这两个程序可以共享同样的变量和内存。
为了补充这个不错的回答,我们可以用一种简单的方法来解决问题,这个方法不需要任何黑科技,也不需要修改系统文件。我们可以使用这个叫做%%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
如果你想要运行一个完全使用只有 Julia 的笔记本(或者只通过 Julia 调用其他语言),那么有一个更简单的方法。首先,启动 Julia,然后输入
Pkg.add("IJulia")
来获取 IJulia 这个包。接着你可以
ipython notebook --profile julia
这样你的笔记本就会把 Julia 设为默认的语言。
特别感谢 David Sanders 和他写的 优秀的 Julia 教程,这些教程都是用 IPython 笔记本写的;还有 视频在这里。
在IPython笔记本中运行Julia
小技巧
为了在IPython笔记本中运行Julia代码(或者其他语言),我只需要在以下位置的_script_magics_default
方法中的default
列表里添加字符串'julia'
:
/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
]
- 示例笔记本(使用Python3)
Julia魔法(双向)
要使用%load_ext julia.magic
,你需要在这里运行setup.py
:
更新(2014年9月4日):setup.py
文件已经移动到pyjulia.jl:
当你运行Pkg.add("IJulia")
时,会在你的文件系统中克隆这个库:
cd ~/.julia/v0.3/IJulia/python/
sudo python2 setup.py install
目前这只在Python2中对我有效。Python3会报错:
ImportError: No module named 'core'
当我尝试加载扩展时,但安装时没有报错。
安装后,你也可以在Python2中这样做:
from julia import Julia
j = Julia()
arr = j.run('[1:10]')
type(arr) # numpy.ndarray
从系统shell运行脚本
在笔记本单元中使用shell模式的语法:
!julia my_script.jl
在IJulia笔记本中运行Python
使用PyCall
这并不是在你想要的上下文中真正运行Python代码,但你可以在Julia中使用Python库:
using PyCall
@pyimport math
println(math.pi)
从系统shell运行脚本
在笔记本单元中使用shell模式的语法:
;python my_script.py