[PYTHON] Machen wir einen Jupyter-Kernel

Was machst du?

Jupyter unterstützt über 50 Sprachen (IPython-Kernel für andere Sprachen -für-andere-Sprachen)). Es ist einfach, sich an neue Sprachen anzupassen. (Referenz: Kernel für Jupyter erstellen) Als Beispiel erstellen wir hier einen neuen Kernel von Jupyter namens KeyValue.

Was machen?

Erstellen Sie einfach etwas, das Schlüssel / Wert-Paare verwaltet.

Befehl Beschreibung
? Schlüsselliste anzeigen
Taste Zeigt den Wert an, der der Taste entspricht
Schlüsselwert Stellen Sie den Wert ein, der dem Schlüssel entspricht

Implementierung

Legen Sie einfach die beiden Dateien an Ort und Stelle.

JSON-Datei

Erstellen Sie die folgende JSON-Datei. Den Speicherort finden Sie unter Kernel-Spezifikationen. (Wenn Sie "python3" nicht in "argv" haben, ändern Sie es in "python".)

keyvalue/kernel.json


  "argv": [
    "python", "-m", "keyvaluekernel", "-f", "{connection_file}"
  ],
 "display_name": "KeyValue"
}

Python-Datei

Erstellen Sie die folgende Python-Datei unter dem Python-Installationsziel.

keyvaluekernel.py


from ipykernel.kernelbase import Kernel

class KeyValue(Kernel):
    implementation = 'KeyValue'
    implementation_version = '0.1'
    language = 'no-op'
    language_version = '0.1'
    language_info = {'name': 'KeyValue', 'mimetype': 'text/plain'}
    banner = 'Dictionry of Key, Value'
    _d = {}
    def do_execute(self, code, silent, store_history=True,
             user_expressions=None, allow_stdin=False):
        s = code.strip()
        if not silent:
            if s.startswith('?'):
                c = {'name': 'stdout', 'text': ' '.join(KeyValue._d.keys())}
            else:
                ss = s.split(maxsplit=1)
                if len(ss) == 1:
                    if s in KeyValue._d:
                        c = {'name': 'stdout', 'text': KeyValue._d[s]}
                    else:
                        c = {'name': 'stderr', 'text': 'Not found'}
                else:
                    KeyValue._d[ss[0]] = ss[1]
                    c = {'name': 'stdout', 'text': ss[1]}
            self.send_response(self.iopub_socket, 'stream', c)
        return {'status': 'ok',
                'execution_count': self.execution_count,
                'payload': [],
                'user_expressions': {},
               }
    def do_complete(self, code, cursor_pos):
        s = code[:cursor_pos]
        return {'status': 'ok', 'matches': [k for k in KeyValue._d if k.startswith(s)],
                'cursor_start': cursor_pos, 'cursor_end': -1, 'metadata': {}}

if __name__ == '__main__':
    from ipykernel.kernelapp import IPKernelApp
    IPKernelApp.launch_instance(kernel_class=KeyValue)

Alternativ können Sie es an einem beliebigen Ort platzieren und den Ort in PYTHONPATH des Schlüssels env der JSON-Datei angeben.

keyvalue/kernel.json


{
  "argv": [
    "python", "-m", "keyvaluekernel", "-f", "{connection_file}"
  ],
  "display_name": "KeyValue",
  "env": {
    "PYTHONPATH": "/path/to/your/modules"
  }
}

Berechnet das Ergebnis der Ausführung mit do_execute und gibt es zurück. do_complete gibt zurück, was zu tun ist, wenn die Registerkarte gedrückt wird.

OS Beispiel für den Erstellungsort
Windows C:\Anaconda3\Lib\site-packages
Ubuntu /usr/local/lib/python3.4/dist-packages

probieren Sie es aus

--Starten Sie mit "jupyter notebook" und wählen Sie [Key Value] unter [New]. --Geben Sie "key1 value1" ein und führen Sie aus (Umschalt + Eingabetaste).

  • Wenn Sie "key1" eingeben und ausführen, wird "value1" angezeigt. -Geben Sie "key2 value2" ein und führen Sie es aus. -Wenn Sie "?" Ausführen, wird eine Liste der Schlüssel angezeigt. -Geben Sie bis zu "k" ein und drücken Sie [Tab], um Kandidaten zu erhalten.

image

Docker-Bild

Wir haben ein Docker-Image (tsutomu7 / keyvalue) zur einfachen Bestätigung vorbereitet. Sie können Folgendes überprüfen.

ubuntu


docker run -it --rm tsutomu7/keyvalue

Öffnen Sie nach dem Ausführen des obigen Vorgangs "http: // Host-IP-Adresse: 8888" (z. B. "http://172.17.0.2:8888").

Recommended Posts