是的,如果你想的话,你可以把这些代码添加到笔记本上。在
是的,你不应该这样做作为一个普遍的解决方案。在
笔记本是一个复杂的结构,正如在文本细节中所暗示的那样(我认为它是JSON)。它可以包含python代码,也可以包含magics—cython、bash、latex等等—这是python内核无法理解的。实际上,您必须复制常规Python导入过程的一部分功能,因为Python本机不会理解Ipython笔记本中有Python代码。在
但是。。。通常,如果您有大量的Python代码,您会将其拆分为模块,然后导入这些模块。这些操作正常,因为这是一个普通的Python导入。在
例如,一旦加载了告诉它如何理解笔记本是什么的代码,实际导入的只是
import nbpackage.mynotebook
我们可以在模块导入代码中使用相同的技术-find_notebook和{}可以放入一个助手模块(例如helper.py),您只需在笔记本中使用from helper import NotebookFinder。在
我想你还是要在导入的同时从笔记本内部调用sys.meta_path.append(NotebookFinder())。在
下面是一个具体的示例,说明如何使用导入功能从笔记本创建API:
创建笔记本。我们称之为scanner.ipynb:import os, sys
def scanner(start):
for root, dirs,files in os.walk(start):
# remove any already processed file
if 'done' in dirs:
dirs.remove('done')
for names in files:
name, ext = os.path.splitext(names)
# only interested in media files
if ext == '.mp4' or ext == '.mkv':
print(name)
创建一个名为reuse.py的常规python文件。这是您的通用可重用Ipython导入模块:
^{pr2}$
创建特定的API文件,将上面的加载程序与上面的笔记本连接起来。称之为scan_api.py:# Note the python import here
import reuse, sys
# This is the Ipython hook
sys.meta_path.append(reuse.NotebookFinder())
import scanner
# And now we can drawn upon the code
dir_to_scan = "/username/location"
scanner.scanner(dir_to_scan)