jupyter notebook vs jupyter console:markdown(和 latex、html 等)对象的显示
jupyter notebook vs jupyter console: display of markdown (and latex, html, etc) objects
我希望能够 运行 jupyter notebook 作为常规 python 文件(使用标准 python 解释器)作为
出色地。我面临的问题是,在 python 中,我无法以可用的形式呈现降价对象:
运行 宁下面的代码呈现在笔记本中,但打印 <IPython.core.display.Markdown object>
在
当 运行 仅使用 python.
from IPython.display import Markdown, display
display(Markdown('# Hello World!'))
我试图想出一种方法来完成这项工作,但发现了这个丑陋的解决方法:
from IPython.display import Markdown, display
from IPython import get_ipython
from IPython.core.displaypub import DisplayPublisher
from ipykernel.zmqshell import ZMQDisplayPublisher
display_pub_class = get_ipython().display_pub_class()
def displaymd(strg):
if isinstance(display_pub_class, ZMQDisplayPublisher):
display(Markdown(strg))
elif isinstance(display_pub_class, DisplayPublisher):
print(strg)
else:
# ??
display(strg)
displaymd('# Hello World!')
这看起来很老套!有没有更简单的方法来获得合理的 display
降价对象?或者至少是一种更简单的方法来了解 display
是否能够呈现降价?
同样的问题也适用于乳胶、html 和类似的物体。
刚刚找到了一个更简单的方法来检查我是否在 ipython:
def on_ipython():
if 'get_ipython' in globals():
return True
else:
return False
def displaymd(strg):
if on_ipython():
display(Markdown(strg))
else:
print(strg)
这还是不太好...
选项 1:包含 'text/plain' 和 'text/markdown' 条目的口述
您可以将包含不同 MIME 类型的字典传递给 IPython 的 display(..., raw=True)
:Jupyter Notebook 将使用丰富的表示形式,以及 IPython 或普通的 Python前端将退回到 text/plain
表示。
这是一个最小的完整示例;尝试 运行 在 IPython 终端和 Jupyter notebook 中使用它,你会看到它在两者中都能正确呈现。
from IPython.display import display
my_markdown_string = '''\
# Heading one
This is
* a
* list
'''
display({'text/plain': my_markdown_string,
'text/markdown': my_markdown_string},
raw=True)
选项 2:为 class Markdown
的对象定义自定义 text/plain 格式化程序
示例基于 IPython display
文档中的 'define a new int
formatter' 示例。您需要 运行 在 IPython 中查看其效果。
from IPython.display import display, Markdown
def md_formatter(md, pp, cycle):
pp.text(md.data)
text_plain = get_ipython().display_formatter.formatters['text/plain']
text_plain.for_type(Markdown, md_formatter)
display(Markdown('x **x** x'))
# x **x** x
del text_plain.type_printers[Markdown]
display(Markdown('x **x** x'))
# <IPython.core.display.Markdown object>
附录:MIME类型列表Jupyter/IPython知道
摘自 DisplayFormatter 文档:
See the display_data
message in the messaging documentation for
more details about this message type.
The following MIME types are currently implemented:
- text/plain
- text/html
- text/markdown
- text/latex
- application/json
- application/javascript
- image/png
- image/jpeg
- image/svg+xml
我希望能够 运行 jupyter notebook 作为常规 python 文件(使用标准 python 解释器)作为 出色地。我面临的问题是,在 python 中,我无法以可用的形式呈现降价对象:
运行 宁下面的代码呈现在笔记本中,但打印 <IPython.core.display.Markdown object>
在
当 运行 仅使用 python.
from IPython.display import Markdown, display
display(Markdown('# Hello World!'))
我试图想出一种方法来完成这项工作,但发现了这个丑陋的解决方法:
from IPython.display import Markdown, display
from IPython import get_ipython
from IPython.core.displaypub import DisplayPublisher
from ipykernel.zmqshell import ZMQDisplayPublisher
display_pub_class = get_ipython().display_pub_class()
def displaymd(strg):
if isinstance(display_pub_class, ZMQDisplayPublisher):
display(Markdown(strg))
elif isinstance(display_pub_class, DisplayPublisher):
print(strg)
else:
# ??
display(strg)
displaymd('# Hello World!')
这看起来很老套!有没有更简单的方法来获得合理的 display
降价对象?或者至少是一种更简单的方法来了解 display
是否能够呈现降价?
同样的问题也适用于乳胶、html 和类似的物体。
刚刚找到了一个更简单的方法来检查我是否在 ipython:
def on_ipython():
if 'get_ipython' in globals():
return True
else:
return False
def displaymd(strg):
if on_ipython():
display(Markdown(strg))
else:
print(strg)
这还是不太好...
选项 1:包含 'text/plain' 和 'text/markdown' 条目的口述
您可以将包含不同 MIME 类型的字典传递给 IPython 的 display(..., raw=True)
:Jupyter Notebook 将使用丰富的表示形式,以及 IPython 或普通的 Python前端将退回到 text/plain
表示。
这是一个最小的完整示例;尝试 运行 在 IPython 终端和 Jupyter notebook 中使用它,你会看到它在两者中都能正确呈现。
from IPython.display import display
my_markdown_string = '''\
# Heading one
This is
* a
* list
'''
display({'text/plain': my_markdown_string,
'text/markdown': my_markdown_string},
raw=True)
选项 2:为 class Markdown
的对象定义自定义 text/plain 格式化程序示例基于 IPython display
文档中的 'define a new int
formatter' 示例。您需要 运行 在 IPython 中查看其效果。
from IPython.display import display, Markdown
def md_formatter(md, pp, cycle):
pp.text(md.data)
text_plain = get_ipython().display_formatter.formatters['text/plain']
text_plain.for_type(Markdown, md_formatter)
display(Markdown('x **x** x'))
# x **x** x
del text_plain.type_printers[Markdown]
display(Markdown('x **x** x'))
# <IPython.core.display.Markdown object>
附录:MIME类型列表Jupyter/IPython知道
摘自 DisplayFormatter 文档:
See the
display_data
message in the messaging documentation for more details about this message type.The following MIME types are currently implemented:
- text/plain
- text/html
- text/markdown
- text/latex
- application/json
- application/javascript
- image/png
- image/jpeg
- image/svg+xml