【问题标题】:How to follow DRY principles in jupyter python notebook如何在 jupyter python notebook 中遵循 DRY 原则
【发布时间】:2018-08-21 09:14:46
【问题描述】:

Jupyter 是一个笔记本,一个网络应用程序,人们可以在其中编写文档并执行多种语言的代码。出于这个问题的目的,让我们坚持只使用 python。

我经常发现自己在许多 jupyter 文件中复制代码,主要是跨数据科学项目的预测模型的评估代码。怎样才能不在 jupyter python notebooks 中重复自己?

【问题讨论】:

    标签: python jupyter-notebook dry


    【解决方案1】:

    使用通用代码创建一个模块并将其导入需要它的笔记本中。 Jupyter 可以将 Python 笔记本导出为 Python 模块。文件 > 下载为 > Python (.py)。

    将该文件放在内核的路径中,然后您就可以导入它了。

    使用 Python 内核,您可以使用

    查看路径
    import sys
    sys.path
    

    如果您将模块放在任何这些目录中,则可以导入它。您还可以使用sys.path.append(...)(仅针对该会话)或通过更新操作系统中的相关环境变量(通常为PYTHONPATH)来附加新的路径字符串。


    可以导入 .ipynb,但不如先转换它那么简单。 IPython 单元可以使用扩展语法,如 %-magics 等。IPython 包括以编程方式加载 .ipynb 文件所需的所有工具(请参阅nbformat.read()IPython.core.interactiveshell.InteractiveShell),然后只需使用标准库导入挂钩即可。

    这里复制有点太复杂了,但是Jupyter documentation explains how to do it.


    有没有办法只从另一个笔记本导入某些单元格?好像没找到。

    是的,应该可以导入单个单元格,但请注意,如果假定您未导入的单元格已经运行,则该单元格可能无法正常工作。

    链接文档中的相关 sn-p 是

         for cell in nb.cells:
            if cell.cell_type == 'code':
                # transform the input to executable Python
                code = self.shell.input_transformer_manager.transform_cell(cell.source)
                # run the code in themodule
                exec(code, mod.__dict__)
    

    注意这只是如何使用循环依次运行每个代码类型的单元格。您可以在此处运行特定的单元格(或多个单元格)而不是所有单元格。那么导入的模块将只运行该代码。

    棘手的部分可能是识别您想要的单元格。显而易见的方法是计数,但您也可以以某种方式标记单元格,例如在循环中,仅当cell.source 以某个评论或其他内容开头时才运行一个单元格。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    • 2015-08-22
    相关资源
    最近更新 更多