我想为Jupyter Notebook写一项新服务。但是我很难弄清楚如何运行它。我创建的服务类似于在https://github.com/jupyter/notebook/tree/master/notebook/services上找到的默认服务。
我试图在由jupyter/base-notebook
构建的Docker容器中运行它。我已将c.NotebookApp.extra_services = ['TestHandler']
添加到Notebook配置中,并将服务复制到了/opt/conda/lib/python3.6/site-packages/notebook/services/test.py
。
启动Notebook服务器时,出现错误消息ModuleNotFoundError: No module named 'TestHandler'
,因此显然我的服务未正确加载。不幸的是,我找不到有关如何在Jupyter Notebook中加载服务的任何文档。
这是我的test.py
服务:
import json
from tornado import web
from ...base.handlers import APIHandler
class TestHandler(APIHandler):
@web.authenticated
def get(self):
res = { "foo": "bar" }
self.finish(json.dumps(res))
default_handlers = [
(r"/api/test", TestHandler),
]
答案 0 :(得分:0)
该配置值需要具有default_handlers
属性的可导入模块的列表。因此,您可以使用完整路径:
# assuming your `test.py` lives in a top level package `mypackage`
c.NotebookApp.extra_services = ['mypackage.test']
或者,您可以直接构造一个模块:
import sys
from types import ModuleType
name = 'some_long_ass_name_that_doesnt_conflict'
sys.modules[name] = ModuleType(name) # make the import machinery find it
sys.modules[name].default_handlers = [...]
c.NotebookApp.extra_services = [name]