2015-10-28 7 views
5

voglio caricare un Jupyter Notebook Server Extension all'interno di una directory locale:Impossibile trovare il modulo durante il caricamento Jupyter Server Extension

server_ext/ 
|__ __init__.py 
|__ extension.py 

extension.py

from notebook.utils import url_path_join 
from notebook.base.handlers import IPythonHandler 

class HelloWorldHandler(IPythonHandler): 
    def get(self): 
     self.finish('Hello, world!') 

def load_jupyter_server_extension(nbapp): 
    """ 
    nbapp is istance of Jupyter.notebook.notebookapp.NotebookApp 
    nbapp.web_app is isntance of tornado.web.Application - can register new tornado.web.RequestHandlers 
    to extend API backend. 
    """ 
    nbapp.log.info('My Extension Loaded') 
    web_app = nbapp.web_app 
    host_pattern = '.*$' 
    route_pattern = url_path_join(web_app.settings['base_url'], '/hello') 
    web_app.add_handlers(host_pattern, [(route_pattern, HelloWorldHandler)]) 

ho eseguito il seguente comando dalla directory che contiene server_ext:

jupyter notebook --NotebookApp.server_extensions="['server_ext.extension']" 

Ma ho ricevuto l'errore "Nessun modulo denominato estensione". C'è qualcosa che devo fare per ottenere la sessione Jupyter/python per riconoscere il percorso del modulo?

risposta

6

capito OUT-

si scopre che la chiamata di Jupyter Notebook per importlib.import_module pacchetto insiemi = n, il che significa che i percorsi relativi non funzioneranno.

Come soluzione temporanea, lo script ~/.jupyter/jupyter_notebook_config.py può essere modificato per aggiungere la directory locale a PYTHONPATH in modo che il modulo possa essere trovato.

import sys 
sys.path.append("C:\\Users\\eric\\server_ext") 

c.NotebookApp.server_extensions = [ 
    'extension' 
]