# Jupyter

Jupyter est une application web utilisée pour programmer dans plus de 40 langages de programmation, dont Python, Julia, Ruby, R, ou encore Scala. C'est un projet communautaire dont l'objectif est de développer des logiciels libres, des formats ouverts et des services pour l'informatique interactive. Jupyter est une évolution du projet IPython. Jupyter permet de réaliser des calepins ou notebooks, c'est-à-dire des programmes contenant à la fois du texte, simple ou enrichi typographiquement et sémantiquement grâce au langage à balises simplifié Markdown, et du code, lignes sources et résultats d'exécution. Ces calepins sont notamment utilisés en science des données pour explorer et analyser des données.

## Historique

En 2014, Fernando Pérez annonce un projet dérivé d'IPython nommé Projet Jupyter. IPython continue d'exister comme interpréteur de commande Python et noyau pour Jupyter, tandis que le notebook et d'autres composants d'IPython qui ne sont pas liés à un langage sont passés sous le nom de Jupyter.
Le nom Jupyter fait référence :
* aux trois principaux langages de programmation pris en charge par Jupyter, à savoir Julia, Python et R ;
* aux carnets de notes de Galilée sur la découverte des lunes de Jupiter ;
Le projet Jupyter développe et maintient les logiciels interactifs Jupyter Notebook, JupyterHub et JupyterLab.

## Philosophie

La philosophie de fonctionnement du projet Jupyter est de soutenir la science interactive des données et le calcul scientifique dans tous les langages de programmation par le biais du développement de logiciels libres. Selon le site web du projet Jupyter, Jupyter sera toujours un logiciel 100% open-source, libre d'utilisation pour tous et publié sous les termes de la licence BSD modifiée.

## Logiciels
### Jupyter Notebook

Jupyter Notebook (anciennement IPython Notebooks) est un environnement de programmation interactif basé sur une interface web permettant de créer des documents Jupyter Notebook. Le terme "notebook" peut faire référence à de nombreuses entités différentes, adaptées au contexte, telles que l'application web Jupyter, le serveur web Jupyter Python ou le format de document Jupyter.
Un document Jupyter Notebook est un document JSON. Il suit un schéma contenant une liste ordonnée de cellules d'entrée/sortie. Celles-ci peuvent contenir du code, du texte (à l'aide de Markdown), des formules mathématiques, des graphiques et des médias interactifs. Ce document se termine généralement par l'extension ".ipynb".
À l'aide de la commande « Télécharger sous » de l'interface web, du module nbconvert ou l'interface de ligne de commande "jupyter nbconvert" dans un interpréteur de commande, un document Jupyter Notebook peut être converti en un certain nombre de formats ouverts de sortie : HTML, diapositives de présentation, LaTeX, PDF, ReStructuredText, Markdown, Python.
Afin de simplifier la visualisation des documents Jupyter Notebook sur le web, la bibliothèque nbconvert est fournie en tant que service par l'application Jupyter NbViewer. Cette application web peut prendre une URL pointant vers n'importe quel document disponible publiquement, le convertir à la volée en HTML et l'afficher à l'utilisateur.
Jupyter Notebook s'appuie également sur un certain nombre de bibliothèques open-source :
* IPython
* ØMQ (ZeroMQ)
* Tornado
* jQuery
* Bootstrap
* MathJax
Jupyter Notebook peut se connecter à de nombreux noyaux, des environnements permettant de programmer et d'exécuter différents langages, dans la terminologie de Jupyter.

### JupyterHub

JupyterHub est un serveur multi-utilisateurs dédié : il est conçu pour prendre en charge de nombreux utilisateurs en gérant de nombreux serveurs Jupyter Notebook.

### JupyterLab

JupyterLab est une nouvelle interface utilisateur, publiée en 2018 et destinée à remplacer l'interface classique (Jupyter Notebook). Elle adjoint au carnet de notes classique de nombreux composants personnalisables (terminal, éditeur de texte, navigateur de fichiers, etc.), intégrés et utilisables en parallèle.

### Jupyter Book

Jupyter Book est un projet open source permettant de construire des livres et des documents à partir de matériel informatique. Il permet à l'utilisateur de construire le contenu dans un mélange de Markdown avec une version étendue de Markdown appelée MyST.

## Noyaux

Jupyter s'appuie sur un noyau IPython pour Python 2, un noyau IPython pour Python 3, IRkernel, un noyau pour le langage R, ainsi que le langage Scala basé sur R et IJulia, un noyau pour le langage Julia, maintenus par les principaux développeurs du projet. Un grand nombre de noyaux sont développés et maintenus par la communauté des développeurs. Cela inclut IPyLua, noyau pour le langage Lua (il existe plusieurs noyaux Lua), IRuby, noyau pour le langage Ruby, Calysto Processing pour Processing, etc..

## Versions

Jupyter peut être installé sur un ordinateur personnel. JupyterHub peut être installé sur un serveur et permet de définir des comptes utilisateurs.

## Logiciels dérivés

Des extensions pour Visual Studio Code et PyCharm permettent aussi de l'utiliser dans un EDI.
JupyterLab s'appuie sur l’architecture de Jupyter et propose une interface utilisateur repensée et découpée en composants.
Le projet Nteract développe une version de Jupyter en application de bureau en utilisant le système Electron.

## Environnements Jupyter
### En ligne

* Azure Notebooks
* Binder
* Google Colaboratory

### Windows

* Anaconda
* Jupyter Portable
* Edupyter

### Mac

* Anaconda

### Linux

* Anaconda
* Jupyter Lab