.. _install: Installation et interpréteurs ############################# .. contents:: Table des matières :local: .. 1 Notions d'Unix 2 Installation 2.1 Installation simple 2.2 Environnements virtuels 2.2.1 [mini]conda 2.2.2 virtualenv 3 Interpréteurs 3.1 L'interpréteur de base `python` 3.2 L'interpréteur avancé `ipython` 3.3 Les interfaces `jupyter` 3.3.1 Interface `jupyter notebook` 3.3.2 Interface `jupyter lab` 3.4 Interpréteurs en ligne .. packaging: setuptools>=61.0 impose python 3.7 f-string {var=} impose python 3.8 .. ATTENTION:: Le cours se base sur les fonctionnalités de **Python 3.8+**. Notions d'Unix ============== Python est un langage disponible sur de très nombreuses plateformes [#ti83]_; cependant, dans le cadre de ce cours, nous supposerons être sous un système d'exploitation de la famille Unix (p.ex. Linux, MacOS). Les concepts suivants sont supposés connus: * ligne de commande: éxécutables et options; * arborescence: chemin relatif (`[./]...`) et absolu (`/...`), navigation (:command:`cd`); * gestion des fichiers (:command:`ls`, :command:`rm`, :command:`mv`) et répertoires (:command:`mkdir`); * gestion des éxécutables: :envvar:`$PATH`, :command:`chmod +x`; * gestion des processus: `&`, :kbd:`Ctrl-c`, :kbd:`Ctrl-z` + :command:`bg`; * variables d'environnement: :command:`export`, :file:`.bashrc`. .. rubric:: Liens: * `Quelques notions et commandes d'UNIX `_ |fr| * `The Linux command line for beginners `_ * `A Quick Introduction to Unix `_ * `UNIX Tutorial for Beginners `_ .. Note:: dans le reste du cours, les commandes du terminal sont indiquées par:: $ command Le `$` correspond à l'invite du terminal, et ne fait pas partie de la commande à exécuter! Installation ============ Ce cours repose essentiellement sur les outils suivants: - `Python 3.8+ `_ (inclus l'interpréteur de base et la bibliothèque standard); - les dépendances suivantes (:download:`requirements.txt`): - les bibliothèques scientifiques `Numpy et Scipy `_, - la bibliothèque graphique :doc:`Matplotlib `, - un interpréteur interactif évolué, p.ex. `ipython `__ et/ou `jupyter `__, - éventuellement quelques librairies supplémentaires selon les cas (:pypi:`setuptools`, :pypi:`pandas`, :pypi:`astropy`, etc.) ; - un :wen:`éditeur de texte évolué ` (avec coloration syntaxique, complétion automatique de code, introspection, etc.), p.ex. `emacs `_, `vi `_/`neovim `_, `gedit `_ ou tout autre ayant votre préférence [#editeur]_; - éventuellement un :ref:`ide` (logiciel combinant interpréteur, éditeur, *debugger*, *linter*, *profiler*, etc.), p.ex. `VS Codium `_ [#vscode]_ (générique) ou `spyder `_ (spécifique à Python). Si vous souhaitez utiliser votre ordinateur personnel, ces logiciels peuvent être installés indépendamment, sous Linux, Windows ou MacOS. Il existe également des distributions python « clés en main », p.ex. `[mini]conda `_ (propriétaire) ou `[mini]mamba `_ (open source, plus rapide). Installation simple ------------------- .. index:: pair: installation; pip Si vous avez le contrôle entier de votre ordinateur, il est *a priori* plus simple d'utiliser le gestionnaire de paquets du système (p.ex. `synaptic` sur Ubuntu), avec l'inconvénient majeur de devoir utiliser les versions potentiellement anciennes du système. Même si vous travaillez sur un ordinateur public, il est relativement aisé d'installer sous votre compte les programmes ou librairies Python (p.ex. `ipython`) manquantes à l'aide du gestionnaire d'installation `pip `_. * Vérifier la disponibilité du code sous `PYthon Package Index `_. * Installer p.ex. `ipython `_ (mode *single user*):: $ pip install --user ipython ou plus généralement (:download:`requirements.txt`):: $ pip install --user -r requirements.txt * Compléter alors votre `~/.bashrc` (ou autre fichier de configuration du *shell*):: export PATH=$PATH:$HOME/.local/bin/ .. Il n'est pas nécessaire d'ajuster le PYHTONPATH (https://stackoverflow.com/questions/52060533) export PYTHONPATH=$HOME/.local/lib/python3.6/site-packages/ **Voir également:** `Installing Packages `_ Environnements virtuels ----------------------- Pour une installation plus aboutie de l'infrastructure Python, il est conseillé d'utiliser un environnement virtuel, qui isole entièrement votre infrastructure python de celle de la machine, et permet donc un contrôle fin des versions des différentes composantes (python, librairies, etc.). Il existe différents niveaux et techniques de :wfr:`virtualisation`, nous allons utiliser une virtualisation python légère basée sur le gestionnaire d'environnement `conda `_ et sa version allégée `miniconda `_. .. _mini-conda: [mini]conda ........... .. index:: pair: installation; conda .. rubric:: Installation locale sur linux À adapter selon votre architecture système et la version de python:: $ wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh $ bash Miniconda3-latest-Linux-x86_64.sh $ conda info La procédure installe par défaut `miniconda` sous `~/miniconda3` et modifie en conséquence votre `~/.bashrc`. .. rubric:: Commandes utiles * [dés]activation de l'environnement virtuel: `conda [de]activate`; * [dés]installation d'un *package*: :samp:`conda [un]install {package}`; * installation de l'ensemble des *packages* nécessaires regroupés dans :download:`requirements.txt`: `conda install --file requirements.txt`. .. rubric:: Liens * `Conda cheatsheet `_; * `Definitive guide to Python virtual environments with conda `_. virtualenv .......... .. index:: pair: installation; virtualenv conda_ est puissant, mais a l'inconvénient d'être lourd, p.ex. de ne pas tirer profit de la version système de python (qui peut suffire si elle est suffisamment récente). Sous linux, il peut être avantageux d'utiliser un outil plus léger, :pypi:`virtualenv`, et son interface simplifié :pypi:`virtualenvwrapper`. .. rubric:: Installation :: $ pip install --user virtualenvwrapper puis inclure dans votre `~/.bashrc`:: export WORKON_HOME=~/.virtualenvs export PROJECT_HOME=~/VirtualEnv source /path/to/virtualenvwrapper.sh .. rubric:: Commandes utiles * création de l'environnement virtuel *project*: :samp:`mkvirtualenv {project}`; * activation de l'environnement virtuel *project*: :samp:`workon {project}`; * désactivation de l'environnement virtuel: `deactivate`. .. Attention:: pour mini-conda_ et virtualenv_, ne pas oublier d'activer l'environnement de travail dans chaque nouveau terminal si nécessaire. Interpréteurs ============= L'interpréteur de base `python` ------------------------------- .. index:: pair: interpréteur; python L'interpréteur du langage Python s'appelle :program:`python`, c'est **toujours** celui que l'on utilisera en mode non-intéractif pour exécuter (interpréter) un « script », c.-à-d. un ensemble de commandes regroupées dans un fichier texte (généralement avec une extension `.py`), p.ex.:: $ python code.py Le programme :program:`python` peut également faire office d'interpréteur *interactif* de commandes, mais avec peu de fonctionnalités:: $ python Python 3.6.11 (default, Jun 29 2020, 05:15:03) [GCC 5.4.0 20160609] on linux Type "help", "copyright", "credits" or "license" for more information. >>> .. rubric:: Commandes utiles - :kbd:`Ctrl-d` pour sortir; - :samp:`help({commande})` pour obtenir l'aide d'une commande; - *a priori*, pas d'historique des commandes ni de complétion automatique. .. rubric:: Liens - documentation :doc:`interpréteur de base ` L'interface avancée `ipython` ----------------------------- .. index:: pair: interpréteur; ipython Pour une utilisation intéractive avancée (historique, complétion automatique des commandes, introspection et aide en ligne, interface système, etc.) *dans un terminal*, il est préférable d'utiliser l'interface évoluée :rtfd:`ipython`:: $ ipython Python 3.6.11 (default, Jun 29 2020, 05:15:03) Type 'copyright', 'credits' or 'license' for more information IPython 7.16.1 -- An enhanced Interactive Python. Type '?' for help. In [1]: .. rubric:: Commandes utiles - :kbd:`Ctrl-d` pour sortir; - :kbd:`Tab` pour la complétion automatique; - :kbd:`Haut` et :kbd:`Bas` pour le rappel des commandes; - `%quickref` pour les commandes spécifiques à :program:`ipython`, notamment `object?` pour une aide sur un objet, `object??` pour une aide plus complète (au niveau source); - `%magic` pour la liste des commandes *magiques*, dont * :samp:`%run {mon_script.py}` pour éxecuter un script *dans* l'interpréteur, * `%debug` pour lancer le mode débogage intéractif *post-mortem*, * `%cpaste` pour coller et éxecuter un code préformaté, * :samp:`%timeit {instruction}` pour chronométrer une instruction. .. rubric:: Liens: - `Tutorial `_ - `IPython Tips & Tricks `_ - `En ligne `_ - `Quick refsheet `_ Les interfaces `jupyter` ------------------------ .. index:: pair: interfaces; jupyter Issu du développement de :program:`ipython`, `jupyter `_ découple strictement le *kernel* [#kernel]_ (le *backend*), en charge de l'interprétation et de l'exécution des commandes, de l'interface (le *frontend*), en charge de l'interaction avec l'utilisateur et le reste du monde. Interface `jupyter notebook` ............................ L'interface :rtfd:`jupyter notebook ` introduit la notion de *notebook* (fichier JSON d'extension `.ipynb`), accessible via une application web (utilisable depuis le navigateur) incorporant lignes de code, résultats, textes formatés, équations, figures, etc., et fournissant des outils d'édition et de conversion (HTML, LaTeX, présentation, etc.) et une documentation en ligne:: $ jupyter notebook Cette commande initialise un *kernel* en arrière plan (qui peut servir plusieurs *notebooks*), et ouvre le *notebook dashboard*, à partir duquel vous pouvez créer de nouveaux *notebooks* ou en ouvrir d'anciens. .. figure:: jupyter.png :align: center :width: 60% :alt: Interface `jupyter notebook`. Copie d'écran du *notebook* :ref:`pokemon.ipynb ` |NB|. .. rubric:: Liens * `nbviewer `_, **visualiseur** en ligne de *notebook* (non interactif, voir ci-dessous pour des interpréteurs en ligne); * `A gallery of interesting Jupyter Notebooks `_; * :rtfd:`Unofficial Jupyter Notebook Extensions `; * `Teaching and Learning with Jupyter `_. Interface `jupyter lab` ....................... L'interface :rtfd:`JupyterLab ` permet une expérience encore plus intégrée, incluant des outils de développement (notebook, console `ipython`, explorateur de fichiers, terminal, etc.):: $ jupyter lab .. figure:: jupyterlab.png :align: center :width: 60% :alt: Interface `jupyter lab`. Copie d'écran d'un Jupyter Lab, incluant le *notebook* :ref:`canon.ipynb ` |NB|. .. Note:: L'univers JupyterLab est en développement très actif, et peut être complété de nombreuses `extensions `_ (incompatibles avec les extensions notebook). .. Note:: Il existe également une interface :rtfd:`JupyterLite ` tournant entièrement dans le navigateur et ne nécessitant aucune installation locale. Interpréteurs en ligne ---------------------- Il existe de nombreux services en ligne (généralement sur un modèle *freemium*) offrant des interpréteurs de *notebook* dans le *cloud*. Cela permet de développer à distance sans se soucier des installations et mises à jour, et de travailler interactivement et de collaborer sur des *notebooks* partagés. **Voir également:** `mode collaboratif `_ de JupyterLab. .. rubric:: Comparatif - `Six easy ways to run your Jupyter Notebook in the cloud `_ .. rubric:: MyBinder Le lien suivant permet d'ouvrir ce cours avec une interface de type `jupyter` via le service `MyBinder `_: .. only:: html .. image:: https://mybinder.org/badge_logo.svg :align: center :target: https://mybinder.org/v2/gh/ycopin/Informatique-Python/HEAD .. rubric:: Datalore .. warning:: Cette section n'a pas été mise à jour et est probablement dépréciée depuis la fin du confinement... Pour un cours en distanciel, nous utiliserons le service `datalore `_, qui permet une collaboration en temps réel. * Créer un compte sur https://datalore.jetbrains.com/, * Suivre le `tutoriel `__, * Créer un notebook, * Le partager avec un collègue (p.ex. `yncopin[AT]gmail[DOT]com`) pour tester la collaboration en temps réel, * Le publier, pour tester les commentaires en ligne. .. rubric:: Notes de bas de page .. [#ti83] Y compris maintenant sur des calculettes! .. [#editeur] Ayez conscience que vous allez passer beaucoup de temps *dans* votre éditeur, autant en choisir un non seulement performant, mais qui vous plaise! .. [#vscode] La version open-source et sans *tracker* de `Visual Studio Code `_ de Microsoft. .. [#kernel] Pas nécessairement Python, d'où le nom de `jupyter` pour Julia-Python-R, les trois langages initialement supportés; il en existe maintenant `une centaine `_. .. |fr| image:: ../_static/france_flag_icon.png :alt: Fr .. |en| image:: ../_static/uk_flag_icon.png :alt: En .. |NB| image:: ../_static/favicon-notebook.ico :alt: Jupyter Notebook