如何在Jupyter Python Notebook中遵循DRY原理

时间:2018-08-09 03:05:37

标签: python jupyter-notebook dry

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

我经常发现自己在许多jupyter文件中复制代码,大部分是在跨数据科学项目的预测模型中复制评估代码。我怎么不在jupyter python笔记本中重复自己?

1 个答案:

答案 0 :(得分:3)

使用通用代码创建一个模块,并将其导入需要它的笔记本中。 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.


  

是否可以从另一个笔记本中仅导入某些单元格?我似乎找不到它。

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

链接文档中的相关代码段是

     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以特定注释或某些内容开头的情况下运行单元格。