【问题标题】: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)

【问题讨论】:

    标签: python pandas jupyter-notebook jupyter


    【解决方案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 问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-26
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    • 2020-05-17
    • 1970-01-01
    相关资源
    最近更新 更多