Jupyter笔记本定制服务

时间:2019-02-07 07:20:52

标签: python jupyter-notebook

我想为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),
]

1 个答案:

答案 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]