Jupyter是一个笔记本,是一个Web应用程序,人们可以在其中编写文档并执行多种语言的代码。出于这个问题的目的,让我们只使用python。
我经常发现自己在许多jupyter文件中复制代码,大部分是在跨数据科学项目的预测模型中复制评估代码。我怎么不在jupyter python笔记本中重复自己?
答案 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
以特定注释或某些内容开头的情况下运行单元格。