忽略蟒蛇IPython的魔法(Ignore IPython magic in python)

2019-10-23 06:18发布

什么是使用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,狮身人面像等,然后运行

Answer 1:

对于可以从标准输入读取所有的工具,你可以使用grep任何魔法系和管结果中删除到蟒蛇:

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

作品还有一个bash别名:

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

像PDB工具只接受的文件名可以(再次bash)的称为是这样的:

pdb <(grep -v '^%' magicscript.ipy)


Answer 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.")')


Answer 3:

  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蟒 'IPY笔记本' --template = simplepython.tpl --stdout



Answer 4:

在这种情况下,任何人帮助。

至少对于Databricks,在Github上一个.py文件同步笔记本时,一个神奇的功能,可以用一个特殊格式的注释说明。 像这样:

# MAGIC %run ./my_external_file



文章来源: Ignore IPython magic in python