Faites fonctionner Jupyter avec l'API REST pour extraire et enregistrer le code Python

Je voulais exécuter le code Python du notebook jupyter sur une autre machine, j'ai donc décidé de l'extraire et de l'enregistrer en utilisant l'API de jupyter.

environnement

Examinez le jeton Jupyter

Puisqu'un jeton est nécessaire pour faire fonctionner le jupyter de l'extérieur, vérifiez d'abord le jeton.

Je l'ai entré lors du démarrage de jupyter pour la première fois (devrais-je?), Mais je pense que je l'ai généralement oublié, alors vérifiez le conteneur de jupyter dans l'ordre de recherche → affichage du journal → confirmation du jeton.

Accédez à l'API Jupyter de l'extérieur

État du bloc-notes

J'ai créé un cahier pour les tests. L'URL est ci-dessous. http://localhost:8888/notebooks/work/test1.ipynb image.png

Environnement d'exécution du côté qui touche l'API

Étant donné que l'opération d'API est effectuée avec python, le package de requêtes est requis. Il n'est pas nécessaire que ce soit Docker car il ne met que des requêtes, mais je pense qu'il sera plus facile d'en faire un service plus tard, donc je vais le mettre dans un conteneur. Détails de l'environnement d'essai (Dockerfile) ci-dessous.

FROM python:3.6-buster
RUN pip install requests

Construire.

$ docker build -t jupyter-api .

Démarrez le conteneur. Vous n'avez pas besoin de monter (-v), mais montez le courant pour le moment pour récupérer le fichier créé.

$ docker run -it --net host -v $(pwd):/tmp jupyter-api bash

Essai d'API

Tout d'abord, vérifiez si l'API jupyter peut être utilisée.

import requests
url_api = 'http://localhost:8888/api'
response = requests.get(url_api)
print(response.status_code, response.text)  # 200 {"version": "6.0.3"}

Je peux accéder à l'API en toute sécurité, donc j'obtiens un notebook.

notebook_path = '/work/test1.ipynb'
url_file = url_api + '/contents' + notebook_path

token = 'xxxxxxxxxxxxxxxxx'   #Définir le jeton
headers =  {'Authorization': 'token ' + token}

response = requests.get(url_file, headers=headers)

Les informations du bloc-notes sont renvoyées au format json dans response.text. Ci-dessous, le résultat de l'exécution de print (response.text) est formaté pour l'affichage.

{
  "name": "test1.ipynb",
  "path": "work/test1.ipynb",
  "last_modified": "2020-03-07T21:08:58.897321Z",
  "created": "2020-03-07T21:08:57.594298Z",
  "content": {
    "cells": [
      {
        "cell_type": "code",
        "execution_count": 1,
        "metadata": {
            "trusted": true
        },
        "outputs": [
          {
            "data": {
              "text/plain": "array([0.83709745, 0.46685874, 0.94285637, 0.03938868, 0.79617107,\n       0.98784776, 0.27798577, 0.96118447, 0.5253161 , 0.0690074 ])"
            },
            "execution_count": 1,
            "metadata": {},
            "output_type": "execute_result"
          }
        ],
        "source": "import numpy as np\nnp.random.random(10)"
      }
    ],
    "metadata": {
      "kernelspec": {
        "display_name": "Python 3",
        "language": "python",
        "name": "python3"
      },
      "language_info": {
        "codemirror_mode": {
          "name": "ipython",
          "version": 3
        },
        "file_extension": ".py",
        "mimetype": "text/x-python",
        "name": "python",
        "nbconvert_exporter": "python",
        "pygments_lexer": "ipython3",
        "version": "3.7.4"
      }
    },
    "nbformat": 4,
    "nbformat_minor": 4
  },
  "format": "json",
  "mimetype": null,
  "size": 921,
  "writable": true,
  "type": "notebook"
}

Cette fois, je veux extraire la partie code du notebook, afin que je puisse extraire la source du bloc de content.cells.cell_type = 'code'. cell_type est cell_type = 'markdown' pour les blocs de démarque.

import json
json_src = json.loads(response.text)
src = [cell['source'] for cell in json_src['content']['cells'] if cell['cell_type'] == 'code']

Le code de chaque cellule est stocké dans src en tant qu'élément de tableau, et comme il n'y a qu'une seule cellule du code source cette fois, il s'agit d'un tableau d'un élément.

['import numpy as np\nnp.random.random(10)']                                      

Sortie dans un fichier. Pour le moment, affichez-le avec une déclaration UTF8.

with open('/tmp/test1.py', 'w') as f:
    print("# -*- coding: utf-8 -*-", file=f)
    for block in src:
        print(block, file=f)

Vérifiez le fichier de sortie. Parfait.

# -*- coding: utf-8 -*-
import numpy as np
np.random.random(10)

Comme j'ai pu le sortir du portable en toute sécurité, il semble que je puisse le faire bouillir, le cuire ou l'exécuter.

Matériel de référence

Recommended Posts

Faites fonctionner Jupyter avec l'API REST pour extraire et enregistrer le code Python
Comment créer un environnement d'exécution Python et Jupyter avec VSCode
Essayez le fonctionnement de la base de données avec Python et visualisez avec d3
Comment faire fonctionner l'API Discord avec Python (enregistrement de bot)
API Nifty Cloud facile à utiliser avec botocore et python
La première API à créer avec le framework Python Djnago REST
Génération de spécifications et génération de code dans le développement d'API REST (édition Python)
Utilisez Nutanix avec l'API REST, partie 2
Essayez d'exploiter Facebook avec Python
Une histoire sur l'ajout d'une API REST à un démon créé avec Python
Analyse de correspondance des phrases avec l'API COTOHA et sauvegarde dans un fichier
Importation et téléchargement d'images sur le stockage Azure. Avec Python + requêtes + API REST
Utilisez Firefox avec Selenium depuis python et enregistrez la capture d'écran
Créer une API REST pour faire fonctionner dynamodb avec le Framework Django REST
Fractal pour faire et jouer avec Python
Lier Python et JavaScript avec le notebook Jupyter
Faites fonctionner des appareils électroménagers avec Python et IRKit
Défi pour créer un rapport de liste de l'axe des temps avec l'API Toggl et Python
J'ai essayé d'obtenir le code d'authentification de l'API Qiita avec Python.
Exemple de code pour obtenir oauth_token et oauth_token_secret de l'API Twitter en Python 2.7
Code Python pour former et tester avec Custom Vision of Cognitive Service
Grattage de la nourriture avec python et sortie en CSV
MessagePack-Try pour lier Java et Python avec RPC
Afficher de manière interactive des courbes algébriques en Python, Jupyter
Obtenez l'objet et le corps de Gmail avec Python et l'API Gmail
Liste de code Python à déplacer et à mémoriser
[Python] Mention à plusieurs personnes avec l'API de Slack
Obtenez des utilisateurs appartenant à votre organisation à partir de l'API Garoon REST avec les requêtes Python +
Connectez-vous à Cisco Catalyst avec CentOS7 + Python3 + netmiko et enregistrez la configuration localement
Comment utiliser OAuth et API de compte de service avec le client API Google pour python
Extraire "date actuelle uniquement" et "date et heure actuelles" avec python datetime.
Procédure pour charger MNIST avec python et sortie en png
J'ai essayé de lire et d'enregistrer automatiquement avec VOICEROID2 2
Python Ver. Présentation de WebPay avec un peu de code
Je veux gérer l'optimisation avec python et cplex
Réécrire le code Python2 en Python3 (2to3)
Streaming Python et SensorTag, Kafka, Spark Streaming - Partie 5: Connexion de Jupyter à Spark avec Apache Toree
Extraire des images et des tableaux de pdf avec python pour réduire la charge de reporting
Utiliser Kinesis avec Python
J'ai essayé de lire et d'enregistrer automatiquement avec VOICEROID2
Connectez realsense D435 à un PC sur lequel Ubuntu 16.04 est installé et enregistrez la vidéo de profondeur avec python
Comment extraire des valeurs Null et des valeurs non Null avec des pandas
Exploration avec Python et Twitter API 1 - Fonction de recherche simple
Faire fonctionner Blender avec Python
[Python] Obtenez des informations sur les utilisateurs et des articles sur l'API de Qiita
Enregistrer des listes, des dictionnaires et des taples dans des fichiers externes python
YOLP: extraire la latitude et la longitude avec l'API Yahoo! Geocoder.
[Automatisation] Utilisez GitLab avec Python pour faciliter la gestion des requêtes
Utiliser Excel avec Python (1)
Utiliser Excel avec Python (2)
Comment analyser le code source Java avec AST (Abstract Syntax Tree) en utilisant ANTLR et Python
[Python / Ruby] Comprendre le code Comment obtenir des données en ligne et les écrire au format CSV
Essayez d'utiliser l'API Twitter rapidement et facilement avec Python
écran et écran partagé avec connexion python et ssh au serveur distant
Exécutons jupyter nativement pris en charge par VS Code avec python3.8
Comment extraire n'importe quel rendez-vous dans Google Agenda avec Python
kobitonote.py --Synchroniser les éléments de sauvegarde modifiés avec Kobito vers Evernote