【问题标题】:Execute another ipython notebook in a separate namespace在单独的命名空间中执行另一个 ipython 笔记本
【发布时间】:2013-11-07 13:10:36
【问题描述】:

我一直在使用来自this example 的一些非常好的代码来运行另一个 ipython 笔记本,我(基本上)将其复制在下面。事实证明,这是一种组织代码的好方法。

但是现在,我想将我编写的一些 sympy 表达式与其他人编写的大致等效的 sympy 表达式进行比较。而且由于存在一些名称冲突,我希望能够在它们自己的命名空间中执行这两个笔记本,这样如果 Bob 和我都定义了一个 sympy 表达式x,我就可以评估

Bob.x - Me.x

查看它们是否相同(或找出它们的差异)。 [请注意,使用 this Bunch object 之类的东西很容易将命名空间字典更改为“dottable”命名空间。]

函数如下:

def exec_nb(nbfile):
    from io import open
    from IPython.nbformat import current
    with open(nbfile) as f:
        nb = current.read(f, 'json')
    ip = get_ipython()
    for cell in nb.worksheets[0].cells:
        if cell.cell_type != 'code':
            continue
        ip.run_cell(cell.input)

基本问题是get_ipython 获取当前运行的 ipython 实例,然后run_cell 执行该实例当前命名空间中其他笔记本的单元格。

我不知道如何改变这一点。例如,在 exec 中使用不同的命名空间运行整个命令仍然会找到当前的 ipython 实例,并使用该命名空间。

另外,两个笔记本实际上都需要在 ipython 中运行;我无法将它们导出到脚本并在命名空间中执行脚本。

【问题讨论】:

标签: ipython ipython-notebook


【解决方案1】:

郑重声明,Jakob 指向的链接现已移至here,完美回答了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多