python - 如何在jupyter python笔记本中遵循DRY原则

标签 python jupyter-notebook dry

Jupyter是一个笔记本,一个网络应用程序,人们可以在其中用多种语言编写文档并执行代码。为了解决这个问题,我们只讨论 python。

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

最佳答案

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

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

使用 Python 内核,您可以使用

查看您的路径
import sys
sys.path

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


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

这有点复杂,无法在这里重现,但是 Jupyter documentation explains how to do it.


Is there a way to import only certain cells from another notebook? I can't seem to find 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 的单元格以某个评论或其他内容开头。

关于python - 如何在jupyter python笔记本中遵循DRY原则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51758237/

相关文章:

python - 在 python (lxml) 中抓取嵌套和非结构化表

python - 从 GCS 获取大量 csv 文件到 BQ

c++ - 如何正确删除模板函数中的代码重复

python - 将两个具有相同键但不同字典作为值的嵌套字典组合在一起

python - 如何使用预训练嵌入到 gensim Skipgram 模型中?

python - 如何像 jupyter notebook 的默认单元格输出一样打印

version-control - 在版本控制下使用 IPython 笔记本

python - 评估Python中字串的辅音/元音组成

jquery - 悬停时只有一个jquery函数可用于不同的音频文件

python - "".join(reversed(val)) vs val[::-1]...哪个是 pythonic?