如何检查您是不是在 Jupyter 笔记本中

Posted

技术标签:

【中文标题】如何检查您是不是在 Jupyter 笔记本中【英文标题】:How to check if you are in a Jupyter notebook如何检查您是否在 Jupyter 笔记本中 【发布时间】:2017-10-21 09:07:21 【问题描述】:

我正在创建一个 python 模块,该模块具有显示 pandas DataFrame (my_df) 的功能。

如果用户将模块导入到 Jupyter 笔记本中,我希望通过以下方式为 DataFrame 提供“漂亮”的格式:

from IPython.display import display, html
display(my_df)

如果用户不在 Jupyter 笔记本中,我想显示 DataFrame 的文本形式:

print(my_df)

如何检查代码是否从 Jupyter 笔记本运行?或者,如何从命令行以文本形式显示 DataFrame,而不是在将 HTML 表单导入 Jupyter 笔记本时显示它?

from IPython.display import display, HTML

def my_func(my_df):
    if [... code to check for Jupyter notebook here ...]:
        display(my_df)
    else:
        print(my_df)

【问题讨论】:

【参考方案1】:

您应该查看 os.environ。

在我的机器上你可以看到它

os.environ['_']

【讨论】:

一些 shell 会将 _ 环境变量设置为最后运行的进程。虽然这可能有效,但它并不可靠,我怀疑有比依赖这个更好的答案。【参考方案2】:

您无需检查代码是否从笔记本运行; display() 从命令行调用时打印文本。

test.py:

from IPython.display import display
import pandas as pd 

my_df = pd.DataFrame('foo':[1,2,3],'bar':[7,8,9])
display(my_df)

从命令行:

$ python test.py 
   bar  foo
0    7    1
1    8    2
2    9    3

来自 Jupyter 笔记本:

更新 要检查您是否在交互式 Ipython shell(命令行或基于浏览器)中运行,请检查 get_ipython。 (改编自Ipython 文档)

修改test.py

from IPython.display import display, HTML
import pandas as pd 
my_df = pd.DataFrame('foo':[1,2,3],'bar':[7,8,9])

try:
    get_ipython
    display(my_df)
except:
    print(my_df)

这种方法将: - 在浏览器 Jupyter 笔记本中进行漂亮打印 - 从命令行作为脚本运行时打印文本(例如python test.py) - 如果在 Python shell 中逐行运行,打印后不会变成交互式 Ipython shell

【讨论】:

在交互式 python shell 中,这会将整个 shell 变成 Jupyter notebook 风格的 CLI。 是的——你在你的帖子中没有提到任何关于从交互式 python shell 运行的内容。通过一个简单的命令行调用,它可以按需要工作。 查看我的更新答案以解决交互式 CLI 问题。

以上是关于如何检查您是不是在 Jupyter 笔记本中的主要内容,如果未能解决你的问题,请参考以下文章

如何检查哪个 Jupyter 笔记本有“%run”另一个笔记本?

列出正在运行的 Jupyter 笔记本和令牌

Jupyter笔记本没有执行单元格?

用Jupyter笔记本使用python3.6而不是3.4

如何获得IPython或Jupyter笔记本中最近执行的'执行计数'

在 Jupyter 实验室/笔记本中突出显示检查函数的源代码