如何判断是否从jupyter笔记本中调用了函数?

背心

当我尝试学习一些数据科学编码时,我在Spyder和jupyter笔记本之间进行了一些切换。因此,我想找到一种方法来判断是从一个函数调用另一个函数,还是从另一个脚本中停用仅适用于笔记本的部分。我认为%matplotlib inline当我从Spyder运行代码时,类似以下内容的工作可以省去一部分:

if __name__ != '__main__':
    %matplotlib inline
    print('Hello, jupyter')
else:
    print('Hello, Spyder')

但是__name__ = _main__在这两种情况下,%matplotlib inline按原样放置都会在Spyder中提出错误建议。

我在这里测试了建议:如何检查您是否在Jupyter笔记本中那行得通,但由于我也在Spyder中运行IPython控制台,因此我感到有点困惑。另外,我希望你们中的一些人有其他建议!

谢谢!

詹姆斯·德雷珀

似乎没有正确的方法或适用于未来的方法可以实现这一目标,但我会使用以下模式:

import os

if "JPY_PARENT_PID" in os.environ:
    print('Hello, jupyter')
else:
    print('Hello, Spyder')

它比这里给出的答案更具体,副作用更少它既可以在jupyter笔记本电脑中使用,也可以在jupyter实验室中使用,所以我认为可以放心地将其面向未来一会儿是安全的。

让我知道它如何为您服务。

更新:

上面的解决方案仅适用于> 3.2的spyder

但是,也许以下解决方案适用于所有版本的jupyter笔记本电脑或spyder。基本来说,如果从上面循环,则是相同的,但是我们只是测试os.environspyder的存在。

import os

# spyder_env: was derived in spyder 3.2.8 ipython console running:
# [i for i in os.environ if i[:3] == "SPY"]

spyder_env = set(['SPYDER_ARGS',
                  'SPY_EXTERNAL_INTERPRETER',
                  'SPY_UMR_ENABLED',
                  'SPY_UMR_VERBOSE',
                  'SPY_UMR_NAMELIST',
                  'SPY_RUN_LINES_O',
                  'SPY_PYLAB_O',
                  'SPY_BACKEND_O',
                  'SPY_AUTOLOAD_PYLAB_O',
                  'SPY_FORMAT_O',
                  'SPY_RESOLUTION_O',
                  'SPY_WIDTH_O',
                  'SPY_HEIGHT_O',
                  'SPY_USE_FILE_O',
                  'SPY_RUN_FILE_O',
                  'SPY_AUTOCALL_O',
                  'SPY_GREEDY_O',
                  'SPY_SYMPY_O',
                  'SPY_RUN_CYTHON',
                  'SPYDER_PARENT_DIR'])

# Customize to account for spyder plugins running in jupyter notebook/lab.
n = 0


if "JPY_PARENT_PID" in os.environ:
    # Compare the current os.environ.keys() to the known spyder os.environ.
    overlap = spyder_env & set(os.environ.keys())

    if len(overlap) == n:
        print('Hello, jupyter')   

    # This could be a more specific elif statment if needed.
    else:
        print('Hello, Spyder')

这样可以为您解决问题吗?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章