Python 检查模块是否在Jupyter中运行

Python 检查模块是否在Jupyter中运行,python,jupyter-notebook,jupyter,Python,Jupyter Notebook,Jupyter,我正在寻找一种可靠的方法来确定我的模块是否从Jupyter笔记本中加载/运行,或者更具体地说,是否有可用的ipywidgets 这不是其他问题的重复:我发现的所有其他问题要么没有可靠的解决方案,要么(更常见的是)他们使用Python中常见的“只是尝试一下,然后轻轻失败”方法。在我的例子中,我试图写出以下逻辑: if in_jupyter(): from tqdm import tqdm_notebook as tqdm else: from tqdm import tqdm 我

我正在寻找一种可靠的方法来确定我的模块是否从Jupyter笔记本中加载/运行,或者更具体地说,是否有可用的
ipywidgets

这不是其他问题的重复:我发现的所有其他问题要么没有可靠的解决方案,要么(更常见的是)他们使用Python中常见的“只是尝试一下,然后轻轻失败”方法。在我的例子中,我试图写出以下逻辑:

if in_jupyter():
    from tqdm import tqdm_notebook as tqdm
else:
    from tqdm import tqdm
我不认为“尝试并失败”是一个合适的解决方案,因为我还不想产生任何输出

到目前为止,我找到的最接近解决方案是:

from IPython import get_ipython
get_ipython().config['IPKernelApp']['parent_appname'] == 'ipython-notebook'

但是这个配置属性似乎是空的
traitlets.config.loader.LazyConfigValue
.get\u value(None)
只是一个空字符串)。

您可以检查
类型(get\u ipython())
是否来自
ipykernel
,例如,如果

type(get_ipython()).__module__.startswith('ipykernel.')

但我不确定这有多稳定。

您可以使用以下代码片段来确定您是在jupyter、ipython还是在终端中:

def type_of_script():
    try:
        ipy_str = str(type(get_ipython()))
        if 'zmqshell' in ipy_str:
            return 'jupyter'
        if 'terminal' in ipy_str:
            return 'ipython'
    except:
        return 'terminal'

您可以在

上找到更多深入的信息。如果您的TQM>=4.27.0,您可以从导入来处理此问题:

from tqdm.auto import tqdm

tqdm
然后可以正常使用。如果您在笔记本电脑中,
tqdm
将从
导入。笔记本电脑

这确实有效,但我也担心稳定性。@scnerd请接受这个答案。