{ "cells": [ { "cell_type": "markdown", "metadata": { "nbsphinx": "hidden" }, "source": [ "[prev: Les modules tiers](modules-tiers.ipynb) | [home](../index.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Les environnements virtuels\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "## Contexte\n", "\n", "### Le problème\n", "\n", "1. Quand on installe un module, il installe/update les modules dont il a besoin.\n", "1. Les modules ont des numéros de version et donne des contraintes sur les versions de leurs dépendences.\n", "1. Si deux modules ont une dépendence commune, il n'est pas sûr que les contraintes sur les versions soient compatibles.\n", "1. Plus on installe de modules, plus les conflits sont probables.\n", "\n", "- On peut accepter de revenir sur une version antérieur pour obtenir la compatibilité.\n", " - (pas toujours possible)\n", "- Mais pourquoi être contraint sur la version d'un module A à cause d'un module B alors que A et B ne seront jamais utilisés ensemble ?\n", "\n", "Il ne faut pas installer simultanément les modules A et B ! Comment faire ?\n", "\n", "### La solution\n", "\n", "Faire des boîtes !\n", "\n", "Environnement virtuel (cf [doc](https://docs.python.org/fr/3/glossary.html#term-virtual-environment)) :\n", "\n", ">Environnement d'exécution isolé (en mode coopératif) qui permet aux utilisateurs de Python et aux applications d'installer et de mettre à jour des paquets sans interférer avec d'autres applications Python fonctionnant sur le même système.\n", "\n", "Il y a plusieurs manières d'y arriver :\n", "\n", "- une solution standard : [venv](https://docs.python.org/fr/3/tutorial/venv.html)\n", "- une solution très employée avec python scientifique : [conda environments](https://docs.conda.io/projects/conda/en/latest/user-guide/concepts/environments.html)\n", "\n", "Dans les deux cas, il s'agit d'outils en ligne de commande qui proposent les actions essentielles suivantes:\n", "\n", "- créer un environnement virtuel\n", " - à faire une fois par environnement\n", "- activer un environnement\n", " - à faire dans chaque console où l'on souhaite travailler\n", " - l'environnement actif est indiqué dans la console\n", "- une fois l'environnement activé, les installations se font dans l'environnement" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ " \n" ] }, { "cell_type": "raw", "metadata": { "jupyter": { "source_hidden": true }, "raw_mimetype": "text/x-python", "tags": [] }, "source": [ "from pathlib import Path\n", "from IPython.display import display\n", "import ipywidgets as widgets\n", "images = [f.read_bytes() for f in Path(\"../img/environnements\").glob(\"Diapositive*.PNG\")]\n", "i = 0\n", "def change_image(button):\n", " global i\n", " if button is prev_image:\n", " i -= 1\n", " elif button is next_image:\n", " i+= 1\n", " i = max(0, i)\n", " i = min(len(images)-1, i)\n", " image.value=images[i]\n", "image = widgets.Image(value=images[i], format='png')\n", "prev_image = widgets.Button(tooltip=\"previous\",icon=\"step-backward\")\n", "next_image = widgets.Button(tooltip=\"next\",icon=\"step-forward\")\n", "prev_image.on_click(change_image)\n", "next_image.on_click(change_image)\n", "display(image, widgets.HBox([prev_image, next_image]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Conda environments\n", "\n", "[Documentation complète](https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html)\n", "\n", "`conda` est un outil en ligne de commande, en plus d'installer des modules, peut créer des environnements virtuels complètement isolés.\n", "\n", "### En bref\n", "\n", "Créer l'environnement `toto` avec python 3.10\n", "```bash\n", "conda create -n toto python=3.10\n", "```\n", "\n", "Activer l'environnement `toto`\n", "```bash\n", "conda activate toto\n", "```\n", "\n", "Désactiver l'environnement courant\n", "```bash\n", "conda deactivate\n", "```\n", "\n", "Installer des modules dans l'environnement **actif**\n", "```bash\n", "pip install truc\n", "conda install truc\n", "```\n", "\n", "Voir tout ce qui est installé dans un environnement\n", "```bash\n", "conda list # environnement actif\n", "conda list -n toto\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Venv\n", "\n", "[Documentation complète](https://docs.python.org/3/library/venv.html)\n", "\n", "Il s'agit de l'outil standard, fournit directement avec python.\n", "\n", "- léger et rapide\n", "- il ne permet pas de gérer plusieurs versions de python simultanément\n", "- il n'est pas compatible avec `conda install`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercices\n", "\n", "1. Créer un environnement virtuel conda avec python et numpy.\n", "1. Faire le lien entre votre IDE (spyder?) et cet environnement." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10.9" }, "nbsphinx": { "execute": "always" } }, "nbformat": 4, "nbformat_minor": 4 }