Leçon: Outils de gestion de paquets en python¶

Pourquoi utiliser un environnement virtuel ?¶

Un environnement virtuel est un espace de travail isolé, das lequel les paquets installés n'interférent pas avec d'autres paquets. Ils permettent ainsi une gestion des paquets plus efficaces, par exemple, en évitant souvent les conflits pouvant survenir entre différents paquets installés sur votre système.

Bonnes pratiques¶

  1. Etant donné la propriété d'isolation des environnement virtuels, une bonne pratique consiste à créer un environnement virtuel différent pour chacun de vos projets !!!
  1. Afin d'alléger le packaging de votre code, n'installez que les packages indispensables pour chaque projet

 Différents composants de l'écosystème python¶

pip¶

pip est l'installateur officiel de paquets pour python

venv¶

le module python venv est le module officiel du langage pour créer des environnement virtuel

virtualenv¶

virtualenv est un logiciel open source avancé permettant de créer des environnements python. Il possède plus de fonctionnalités que venv, c'est pourquoi il est plus fréquement utilisé

pyenv¶

pyenv est un logiciel open source vous permettant de gérer différentes version de python. Il est utile quand vous utilisez par exemple différentes versions de python par projet

pyenv-virtualenv¶

pyenv-virtualenv est un plugin de pyenv permettant de gérer des environnements virtuels crée avec virtualenv ou conda

PyPI¶

Python Package Index (PyPI) est le dépot officiel du langage python pour rechercher, installer et publier des packages python

Démo: travailler dans un environnement virtuel pip + pyenv-virtualenv¶

Installation de pyenv¶

Pour installer pyenv, le plus simple est de cloner le dépot github concerné

Lister les versions de python disponible et installer python 3.9.0¶

pyenv install --list
pyenv install 3.9.0

Il est possible peut installer d'autres distributions comme miniconda¶

pyenv install miniconda3-latest

On peut vérifier toutes les versions de python installées¶

pyenv versions

Créer un environnement virtuel avec pyenv-virtualenv¶

pyenv virtualenv 3.9.0 datascience-py3.9

Activer l'environnement virtuel crée¶

pyenv activate datascience-py3.9

Installer les paquets nécessaires à votre projet¶

Dans votre environnement nouvellement crée, il n'y a encore aucun paquet (à par pip et setuptools). Vous allez installer les paquets nécessaires à fonctionnement du code de votre projet:

Soit en les listant manuellement:¶

pip install jupyter notebook matplotlib pandas numpy

Soit à partir d'un fichier de dépendances requirements.txt (conseillé pour les projets)¶

pip install -r requirements.txt

Activation automatique d'environnement virtuel par projet¶

Vous pouvez configurer pyenv pour qu'il active automatiquement un environnement virtuel dans un projet, en vous mettant à la racine de celui-ci et utilisant la commande :

pyenv local datascience-py3.9

pyenv va alors créer un fichier .python-version dans le repertoire courant et activera automatiquement l'environnement virtuel préalablement spécifié à chaque fois que vous vous positionner dans ce répertoire !

Désinstaller une version de python¶

pyenv uninstall 3.9.0

 Anaconda (individual edition)¶

Un toolkit spécialisé pour la data science¶

Anaconda est une entreprise spécialisée dans la data science. Elle edite un toolkit open-source et cross-palteforme contenant de nombreux packages python essentiels pour la data science. Cette solution est très utilisée par les data scientist pour construire, distribuer, installer et maintenir des logiciels grâce a une distribution sous forme de paquets et conda une logiciel de gestion de paquets et d'environnements

Installer Anaconda ou miniconda ?¶

La distribution d'anaconda est très complète et contient plus de 1500 paquets pour la data science (mais pèse plus de 3Go!). Dans la plupart des utilisations courantes, les data scientist ont besoin de moins de paquets et préfèrent utiliser la distribution miniconda, contenant uniquement les paquets les plus courament utilisé. Je vous recommande plutôt d'installer miniconda

Démo: travailler dans un environnement virtuel avec conda¶

A cette étape, je suppose que vous avez déja installé miniconda3 via le dépot officiel ou avec pyenv: pyenv install miniconda-latest

Si vous avez utilisé la distribution anaconda/miniconda pour installer python et des packages additionnels pour la data science, ils ont été installé dans un environnement virtuel par défaut nommé base

Cependant, lorsque vous démarrez un nouveau projet, il est recommandé de vous créer un nouvel environnent virtuel. Par exemple, pour créer un enrivonnement nommé myenv:

conda create -n myenv

Puis activez cet environnement:

conda activate myenv

Vous pouvez ensuite y installer tous les paquets nécessaires à votre projet, par exemple:

conda install scipy=0.15 pandas

ou encore specifier précisement la version de python et les packages à installer au moment de la création de votre environnement:

conda create -n myenv python=3.6 scipy=0.15.0 astroid babel

Gérer ses environnements virtuels¶

Vous pouvez afficher la liste de vos environnements avec la commande:

conda env list

A l'intérieur d'un environnemnt virtuel vous pouvez afficher la liste des paquets installés:

conda list

Vous pouvez filtrer un paquet en particlulier, par exemple pandas:

conda list pandas

Ou si vous souhaitez des infos détaillé sur un paquet:

conda search pandas --info

Distribuer son environnement¶

Vous pouvez distribuer votre environnement afin que vos colaborateurs puissent travailler dans le même environnement (par exemple en le partangeant ou en l'installant sur un serveur) à partir d'un fichier de configuration au format yaml

Vous pouvez créer à la main un fichier myenv.yml pour l'environnement myenv:

name: myenv
channels:
  - javascript
dependencies:
  - python=3.6   
  - bokeh=0.9.2
  - numpy=1.9.*

Ou encore exporter un environnement virtuel déja crée:

conda env export > myenv.yml

Il ne vous reste qu'a partager ce fichier, vos collaborateurs pourront, par exemple, installer un clone de votre environnement sur leur machine:

conda env create -f myenv.yml

Supprimer un environnement virtuel¶

conda remove -n myenv -all

Conda ou pip + pyenv-virtualenv ?¶

Nous avons vu dans les démos précédantes comment créer et gérer des paquets au sein d'environnements virtuels avec deux frameworks : pip + pyenv-virtualenv et conda Les deux solutions sont couramment utilisées dans la communauté data science et suffiront généralement chacune pour vos besoins.
J'ai résumé certains de leurs avantages et incovénients ci dessous:

Conda¶

Avantages¶

  • conda est un logiciel tout-en-un de gestion d'environnements et de paquets, son installation est souvent plus simple
  • conda est plus facile pour démarrer car de nombreuses librairies pour la data science sont préinstallées
  • il est possible d'utiliser pip à l'intérieur d'environnement crées avec conda

Inconvénients¶

  • conda est moins paramétrable que pyenv-virtual env (par exemple pour gérer différentes versions de python)
  • cles distributions anaconda ou miniconda ne suivent pas les bonnes pratiques de gestion de projet: elles est distribuées avec beaucoup de packages pré-installés et peuvent par conséquent être assez volumineuses !
  • conda peut parfois se montrer plus lent

Pip + pyenv-virtualenv¶

Avantages¶

  • pyenv permet l'auto-activation automatique d'un environnement virtuel pour chaque projet
  • pyenv est hautement paramétrable que conda et offre des fonctionnalités pour gérer différentes versions de python
  • il est possible d'utiliser conda à l'intérieur de pyenv-virtualenv
  • pyenv ne dépend pas de python (il est codé en shell) et donc de manière dont vous avez installé python (contrairement à une installation via un package manager par exemple)

Inconvénients¶

  • l'installation demande plus de paramétrage que celle de conda

En résume¶

Si vous débutez et vous souhaitez avoir une installation de python fonctionnelle rapidement conda me semble un bon choix. Si vous aimez paramétrer plus finement vos environnements de développement alors préférez pip + pyenv-virualenv
Les deux solutions étant assez facilement interfacables, vous serez rarement handicapé par le choix de l'une ou l'autre

Sources¶

  • Cet article explique en détail les différents composa,nts de l'écosystème python pour installer, gérer et distribuer des paquets) explique en détail les différents composa,nts de l'écosystème python pour installer, gérer et distribuer des paquets
  • Cet article est un tutoriel simplifié pour installer et utiliser des environnements virtuels en python avec pyenv et virtualenv
  • Cet article vous récapitule de manière synthétique les commandes conda les plus courament utilisées
  • Cet article très complet explique exhaustivement comment gérer plusieurs versions de python