从另一个ipynb文件导入ipynb文件?

182

交互式Python(ipython)非常棒,特别是在现场拼凑代码时...而且以一种易于调整的方式完成。

然而,似乎有趣的用例是使用多个ipython笔记本(ipynb文件)。 显然,笔记本电脑不应该与其他笔记本有关系,这是有道理的,但我希望导入其他ipynb文件。

我看到的唯一解决方法是将我的*.ipynb文件转换为*.py文件,然后可以将其导入我的笔记本。 如果我想真正推动代码重用(不是Python的核心原则吗?),让一个文件保存项目中的所有内容有点奇怪。

我错过了什么吗? ipython笔记本不支持此用例吗? 是否有另一种解决方案可以用于将ipynb文件导入到另一个笔记本中? 我很想继续使用ipynb,但它正在破坏我的工作流程:(


可能是重复问题:https://dev59.com/cnfZa4cB1Zd3GeqPRGeh - Warren Weckesser
3
你可以使用 --script 参数启动笔记本服务器以保存笔记本的 .py 副本。在 IPython 2.0 中,你将能够通过 %run 运行一个笔记本。我们仍在努力研究更好的代码重用机制。 - Thomas K
1
这个例子展示了如何将IPython笔记本作为模块导入,而不会导出重复的脚本。 - minrk
https://dev59.com/7WIj5IYBdhLWcg3whFQH,https://dev59.com/cnfZa4cB1Zd3GeqPRGeh和https://dev59.com/-2Ik5IYBdhLWcg3wIq5U都在询问同一个问题。 - Robie Basak
11个回答

0

虽然“%run childNotebook.ipynb”命令是一个相当简单和有用的解决方案(如前面的答案中提到的),但在子文件也使用另一个“%run grandChildNotebook.ipynb”,但位于另一个目录中时,您应该谨慎使用它!这可能会导致文件重复运行,并且容易出错(因为子级不再使用与其父级相同的路径,而在运行时,Jupyter假定它这样做!)

为了解决上述问题,一种解决方案可能是:在导入任何文件之前,首先检查当前目录的位置,然后根据此采取行动。以下是一个示例:

if 'myFolder' in os.getcwd():
    %run graindChildNotebook.ipynb
else:
    %run myFolder/grandChildNotebook.ipynb

在上面的例子中,首先检查我们是否在'myFolder'目录中。如果是这样,我们会发现'grandChildNotebook'在同一个目录中,只需像平常一样运行即可。否则,我们需要通过添加此文件所在文件夹的名称来运行它。
请注意,这只是一个示例,您应该根据自己的情况制定个性化的解决方案!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接