如何在 jupyter python notebook 中遵循 DRY 原则
How to follow DRY principles in jupyter python notebook
Jupyter 是一个笔记本,一个网络应用程序,人们可以在其中使用多种语言编写文档和执行代码。出于这个问题的目的,让我们坚持 python.
我经常发现自己在许多 jupyter 文件中复制代码,主要是跨数据科学项目的预测模型的评估代码。我怎样才能不在 jupyter python 笔记本中重复自己?
使用通用代码创建一个模块并将其导入到需要它的笔记本中。 Jupyter 可以将 Python notebook 导出为 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.
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
以某个评论或其他内容开头。
Jupyter 是一个笔记本,一个网络应用程序,人们可以在其中使用多种语言编写文档和执行代码。出于这个问题的目的,让我们坚持 python.
我经常发现自己在许多 jupyter 文件中复制代码,主要是跨数据科学项目的预测模型的评估代码。我怎样才能不在 jupyter python 笔记本中重复自己?
使用通用代码创建一个模块并将其导入到需要它的笔记本中。 Jupyter 可以将 Python notebook 导出为 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.
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
以某个评论或其他内容开头。