Python Jupyter笔记本定制服务

Python Jupyter笔记本定制服务,python,jupyter-notebook,Python,Jupyter Notebook,我想为Jupyter笔记本写一个新服务。但我很难弄清楚如何让它运行。我创建了一个类似于这里的默认服务的服务 我正试图在一个Docker容器中运行它,该容器由jupyter/base notebook构建而成。我已将c.NotebookApp.extra_services=['TestHandler']添加到笔记本配置中,并将我的服务复制到/opt/conda/lib/python3.6/site packages/Notebook/services/test.py 当我启动笔记本服务器时,我收到

我想为Jupyter笔记本写一个新服务。但我很难弄清楚如何让它运行。我创建了一个类似于这里的默认服务的服务

我正试图在一个Docker容器中运行它,该容器由jupyter/base notebook构建而成。我已将
c.NotebookApp.extra_services=['TestHandler']
添加到笔记本配置中,并将我的服务复制到
/opt/conda/lib/python3.6/site packages/Notebook/services/test.py

当我启动笔记本服务器时,我收到一个错误,上面写着
ModuleNotFoundError:No module name'TestHandler'
,显然我的服务没有正确加载。不幸的是,我找不到任何关于如何在Jupyter笔记本中加载服务的文档

这是我的
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),
]

该配置值需要具有
default\u handlers
属性的可导入模块列表。因此,您可以使用完整路径:

#假设您的'test.py'位于顶级包'mypackage'中`
c、 NotebookApp.extra_services=['mypackage.test']
或者,您可以直接构造一个模块:

导入系统 从类型导入模块类型 name='一些没有冲突的长屁股名称' sys.modules[name]=ModuleType(name)#让导入机器找到它 sys.modules[name]。默认的_处理程序=[…] c、 NotebookApp.extra_服务=[名称]