Jupyter是一个笔记本,是一个Web应用程序,人们可以在其中编写文档并执行多种语言的代码。出于这个问题的目的,让我们只使用python。
我经常发现自己在许多jupyter文件中复制代码,大部分是在数据科学项目中的预测模型之间复制评估代码。我如何不在jupyter python笔记本中重复自己?
用通用代码创建一个模块,并将其导入需要它的笔记本中。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文档说明了如何执行此操作。
有没有办法只从另一个笔记本导入某些单元格?我似乎找不到。
是的,应该可以导入单个单元格,但是请注意,如果假定未导入的单元格已经运行,则该单元格可能无法正常工作。
链接文档中的相关代码段为
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
以某个注释或某些内容开头的情况下才运行单元格。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句