我如何定义一个简单的单元魔术,就像%%mymagic
不存在一样执行单元?
上下文是我们正在使用出色的IPython 并行框架。在某些地方,我们也使用它定义的%%px
魔法。但有时我们想在没有集群的情况下运行同一个笔记本(仅限本地)。在这种情况下,%%px
未定义,我将不得不将其注释掉。相反,在这种情况下,我想重新定义%%px
:
%%px
: 将是一个无操作。%%px --local
: 只是运行单元格,没有其他副作用。
或者,如果更简单的话,所有%%px
(有或没有)都可以只运行单元格。--local
另一种方法是创建一个假的 ipyparallel 客户端,即具有 0 个节点(但仍然可以正常运行,例如关于%%px --local
)。但这将是另一个问题。
我尝试过的事情:
%alias_magic px time
(毕竟,我不在乎单元格是否定时)。不幸的是,%%time
不接受争论和窒息--local
。定义我自己的“无操作”魔法:
if USE_CLIENT: pass else: # temporarily define %%px cell magic from IPython import get_ipython def px(line, cell): """Do nothing""" pass get_ipython().register_magic_function(px, 'cell')
但这在实际上什么都不做(即不执行单元格)方面做得有点太成功了。
查看IPython/core/magics/execution.py看看是否有任何我可以重用的钩子(只会执行单元格的东西)。我还没有找到,但也许我还不够努力。
还有什么想法吗?