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

31 投票
5 回答
14895 浏览
提问于 2025-04-18 08:55

我的目标是在一个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 个回答

0

这个笔记本里介绍了一种干净又好用的方法:https://github.com/binder-examples/julia-python/blob/master/python-and-julia.ipynb

它主要使用了IPython的魔法命令(比如在Python中直接插入的%julia <julia 代码>%%julia单元格),效果非常不错:Python和Julia这两个程序可以共享同样的变量和内存。

2

为了补充这个不错的回答,我们可以用一种简单的方法来解决问题,这个方法不需要任何黑科技,也不需要修改系统文件。我们可以使用这个叫做%%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
8

如果你想要运行一个完全使用只有 Julia 的笔记本(或者只通过 Julia 调用其他语言),那么有一个更简单的方法。首先,启动 Julia,然后输入

Pkg.add("IJulia")

来获取 IJulia 这个包。接着你可以

ipython notebook --profile julia

这样你的笔记本就会把 Julia 设为默认的语言。

特别感谢 David Sanders 和他写的 优秀的 Julia 教程,这些教程都是用 IPython 笔记本写的;还有 视频在这里

8

另一个选择是使用Beaker。他们提供了一个教程笔记本,这个笔记本可以同时使用R和Python,使用Julia也同样简单。

27

在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
]

IPython *Julia magic*

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

撰写回答