[PYTHON] Faisons un noyau jupyter

Que faites-vous?

Jupyter prend en charge plus de 50 langues (noyaux IPython pour d'autres langues -pour-d'autres-langues)). Il est facile de s'adapter à de nouvelles langues. (Référence: Créer des noyaux pour Jupyter) Ici, à titre d'exemple, créons un nouveau noyau de Jupyter appelé KeyValue.

Que faire

Créez simplement quelque chose qui gère les paires clé / valeur.

Commande Description
? Afficher la liste des touches
Clé Affiche la valeur correspondant à la clé
Valeur clé Définir la valeur correspondant à la clé

Implémentation

Mettez simplement les deux fichiers en place.

Fichier JSON

Créez le fichier JSON suivant. Voir Spécifications du noyau pour l'emplacement. (Si vous n'avez pas "python3" dans "argv", changez-le en "python".)

keyvalue/kernel.json


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

Fichier Python

Créez le fichier python suivant sous la destination d'installation de python.

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)

Vous pouvez également le placer dans n'importe quel emplacement et spécifier l'emplacement dans PYTHONPATH de la clé ʻenv` du fichier JSON.

keyvalue/kernel.json


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

Calcule et renvoie le résultat de l'exécution avec do_execute. do_complete renvoie ce qu'il faut terminer lorsque vous appuyez sur l'onglet.

OS Exemple d'emplacement de création
Windows C:\Anaconda3\Lib\site-packages
Ubuntu /usr/local/lib/python3.4/dist-packages

essayez-le

  • Commencez par "jupyter notebook" et sélectionnez [Key Value] dans [New]. --Entrez "key1 value1" et exécutez (Shift + Enter). --Si vous entrez "key1" et que vous l'exécutez, "value1" sera affiché. -Entrez "key2 value2" et exécutez. -Si vous exécutez "?", Une liste de clés apparaîtra. -Entrez jusqu'à "k" et appuyez sur [Tab] pour obtenir des candidats.

image

Image Docker

Nous avons préparé une image docker (tsutomu7 / keyvalue) pour une confirmation facile. Vous pouvez vérifier comme suit.

ubuntu


docker run -it --rm tsutomu7/keyvalue

Après avoir exécuté ce qui précède, ouvrez "http: // Adresse IP de l'hôte: 8888" (par exemple, "http://172.17.0.2:8888").

Recommended Posts