忽略 python 中的 IPython 魔法
Ignore IPython magic in python
当使用 python 解释器 运行ning 脚本时,忽略 IPython 魔术的最佳方法是什么?
我经常在我的脚本文件中包含 IPython 魔法,因为它与代码交互工作。例如,使用 autoreload
魔法,我不必在进行一些更改和修复错误后保留 reload
-ing 模块:
%load_ext autoreload
%autoreload 2
但是,当我尝试使用常用的 python 解释器 运行 此脚本时,出现错误:
File "<string>", line 1
%load_ext autoreload
^
SyntaxError: invalid syntax
在 if
语句中包装 IPython 魔术不起作用,因为在文件实际 运行 之前检测到不正确的语法。
那么让 python 忽略 IPython 魔法的最佳方法是什么?
每当您想 运行 然后在 python、pdb、sphinx 等
中更改脚本是很烦人的
对于所有可以从标准输入读取的工具,您可以使用 grep 删除任何魔法线并将结果通过管道传输到 python:
grep -v '^%' magicscript.ipy | python
作为 bash 别名工作得很好:
alias pynomagic='( grep -v "^%" | python ) < '
pynomagic magicscript.ipy
像 pdb 这样只接受文件名的工具可以这样调用(bash):
pdb <(grep -v '^%' magicscript.ipy)
你应该在你的配置文件中加载这样的魔法,而不是在你的脚本中!它只是无效 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.")')
创建一个名为 simplepython.tpl
的模板文件。复制以下语句。
{% extends 'python.tpl'%}
{% block codecell %}
{{ super().replace('get_ipython','#get_ipython') if "get_ipython" in super() else super() }}
{% endblock codecell %}
保存simplepython.tpl
.
在命令行中输入:
jupyter nbconvert --to python 'IPY Notebook' --template=simplepython.tpl --stdout
如果这对任何人有帮助。
至少对于 Databricks,在 Github 中将笔记本与 .py 文件同步时,可以使用特殊格式的注释指定魔术函数。
像这样:
# MAGIC %run ./my_external_file
当使用 python 解释器 运行ning 脚本时,忽略 IPython 魔术的最佳方法是什么?
我经常在我的脚本文件中包含 IPython 魔法,因为它与代码交互工作。例如,使用 autoreload
魔法,我不必在进行一些更改和修复错误后保留 reload
-ing 模块:
%load_ext autoreload
%autoreload 2
但是,当我尝试使用常用的 python 解释器 运行 此脚本时,出现错误:
File "<string>", line 1
%load_ext autoreload
^
SyntaxError: invalid syntax
在 if
语句中包装 IPython 魔术不起作用,因为在文件实际 运行 之前检测到不正确的语法。
那么让 python 忽略 IPython 魔法的最佳方法是什么?
每当您想 运行 然后在 python、pdb、sphinx 等
中更改脚本是很烦人的对于所有可以从标准输入读取的工具,您可以使用 grep 删除任何魔法线并将结果通过管道传输到 python:
grep -v '^%' magicscript.ipy | python
作为 bash 别名工作得很好:
alias pynomagic='( grep -v "^%" | python ) < '
pynomagic magicscript.ipy
像 pdb 这样只接受文件名的工具可以这样调用(bash):
pdb <(grep -v '^%' magicscript.ipy)
你应该在你的配置文件中加载这样的魔法,而不是在你的脚本中!它只是无效 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.")')
创建一个名为
simplepython.tpl
的模板文件。复制以下语句。{% extends 'python.tpl'%} {% block codecell %} {{ super().replace('get_ipython','#get_ipython') if "get_ipython" in super() else super() }} {% endblock codecell %}
保存
simplepython.tpl
.在命令行中输入:
jupyter nbconvert --to python 'IPY Notebook' --template=simplepython.tpl --stdout
如果这对任何人有帮助。
至少对于 Databricks,在 Github 中将笔记本与 .py 文件同步时,可以使用特殊格式的注释指定魔术函数。 像这样:
# MAGIC %run ./my_external_file