3

使用 python 解释器运行脚本时忽略 IPython 魔法的最佳方法是什么?

我经常在我的脚本文件中包含 IPython 魔法,因为它可以交互地处理代码。例如,有了autoreload魔法,在我进行一些更改和修复错误之后,我不必继续reload-ing 模块:

%load_ext autoreload
%autoreload 2

但是,当我尝试使用常用的 python 解释器运行这个脚本时,我得到一个错误:

  File "<string>", line 1
    %load_ext autoreload
    ^
SyntaxError: invalid syntax

在语句中包装 IPython 魔法if不起作用,因为在文件实际运行之前检测到不正确的语法。


那么让python忽略IPython魔法的最好方法是什么?

每当您想在 python、pdb、sphinx 等中运行时都必须更改脚本,这很烦人。

4

4 回答 4

3

对于可以从标准输入读取的所有工具,您可以使用 grep 删除任何魔术线并将结果通过管道传输到 python 中:

grep -v '^%' magicscript.ipy | python

可以作为 bash 别名使用:

alias pynomagic='( grep -v "^%" | python ) < '
pynomagic magicscript.ipy

像 pdb 这样只接受文件名的工具可以这样调用(再次 bash):

pdb <(grep -v '^%' magicscript.ipy)
于 2015-05-31T16:21:39.107 回答
3

万一这对任何人都有帮助。

至少对于 Databricks,在将笔记本与 Github 中的 .py 文件同步时,可以使用特殊格式的注释指定魔术函数。像这样:

# MAGIC %run ./my_external_file

于 2019-04-11T17:20:51.200 回答
2

你应该在你的配置文件中加载这样的魔法,而不是在你的脚本中!它只是无效的 Python。

将以下内容放入您的~/.ipython/profile_default/ipython_config.py:

c = get_config()
c.InteractiveShellApp.extensions = ['autoreload']
c.InteractiveShellApp.exec_lines = ['%autoreload 2']
c.InteractiveShellApp.exec_lines.append('print("Warning: disable autoreload in ipython_config.py to improve performance.")')
于 2015-05-31T19:00:37.983 回答
1
  1. 创建一个名为simplepython.tpl. 复制以下语句。

    {% extends 'python.tpl'%}
    {% block codecell %}
    {{  super().replace('get_ipython','#get_ipython') if "get_ipython" in super() else super() }}
    {% endblock codecell %}
    
  2. 保存simplepython.tpl

  3. 在命令行中输入:

    jupyter nbconvert --to python 'IPY Notebook' --template=simplepython.tpl --stdout

于 2018-08-21T21:15:28.067 回答