Outils pour utilisateurs

Outils du site


cours:informatique:dev:python:environnement_python:250_gerer_venv_via_fichier_requirements

Notes et transcriptions du cours “Mettez en place votre environnement Python” disponible sur la plateforme Openclassrooms.

Gérez les environnements virtuels à l'aide du fichier requirements.txt

Pourquoi utiliser un fichier requirements.txt ?

Nous avons créé ensemble deux projets, et un environnement virtuel pour chacun d’eux. Dans chaque environnement virtuel, nous avons installé un ou deux paquets Python. Nous pouvons afficher les paquets que nous avons installés dans notre environnement virtuel à l'aide de la commande pip freeze, pendant que l'environnement est actif.

Que se passe-t-il, toutefois, si nous voulons qu'un autre développeur travaille sur nos projets ? Comment saura-t-il quels paquets installer dans son environnement virtuel ?

Pour garantir que tous les développeurs travaillant sur un projet utilisent le même environnement virtuel, nous utilisons un fichier requirements.txt. Il s'agit de la liste des paquets Python dont l'installation est requise dans un environnement virtuel pour que l'application s'exécute correctement.

Voici un exemple de fichier requirements.txt:

requirement.txt
matplotlib
numpy
requests

Si le fichier requirements.txt ci-dessus est stocké dans un projet, il indique à tout nouvel utilisateur : ”pour commencer à travailler sur ce projet, créez et activez un environnement virtuel, puis installez ces paquets”. Ainsi, le développeur peut commencer à travailler immédiatement sur le projet, en étant sûr d'avoir le même environnement de développement local que les autres développeurs du projet.

Vous avez peut-être déjà constaté que, dans cet exemple, les versions des paquets ne sont pas indiquées. Il est préférable de spécifier une version exacte ou une plage de versions de paquets dans votre fichier requirements.txt . Voici un autre exemple :

requirements.txt
matplotlib==3.2.2
numpy>1.12
requests>2.0,<3.0

Ci-dessus on indique la version exacte à utiliser pour matplotlib, et une plage de versions utilisables pour numpy et requests.

Selon les divers cas possibles dans le développement de logiciels, vous avez plusieurs options :

  1. Ne pas spécifier les versions de paquets.
  2. Spécifier les versions de paquets exactes.
  3. Spécifier une plage de versions de paquets pour chaque paquet.

La différence entre ces scénarios dépasse le cadre de ce cours. Nous allons donc utiliser l'option 2 pour le reste de ce chapitre !

Créez et stockez un fichier requirements

Revenons au projet demo-app-2 sur lequel nous avons travaillé plus tôt. D'abord, placez-vous dans le répertoire demo-app-2:

cd ~/projects/demo-app-2

L'exécution de ls doit montrer que vous avez un fichier appelé demo.py , et un dossier d'environnement virtuel appelé env :

ls
demo.py env

Comme auparavant, nous pouvons exécuter notre démonstration en activant l'environnement virtuel et en utilisant Python pour exécuter l'application :

source env/bin/activate
python demo.py

Comme auparavant, le résultat généré est un graphique

Maintenant, nous voulons créer et stocker un fichier requirements.txt afin de pouvoir partager notre projet (et la spécification de l'environnement virtuel) avec d'autres développeurs. Il existe deux méthodes pour ce faire.

Créez le fichier requirements.txt manuellement

Jusqu'à présent, nous avons seulement installé matplotlib et numpy dans notre environnement virtuel. Nous pouvons donc créer manuellement un fichier requirements.txt contenant juste ces deux paquets. D'abord, vérifiez la version des paquets que vous avez installés, en exécutant pip freeze .

pip freeze
cycler==0.10.0
kiwisolver==1.2.0
matplotlib==3.2.2
numpy==1.19.0
pyparsing==2.4.7
python-dateutil==2.8.1
six==1.15.0

Vous pouvez remarquer, à ce stade, que d'autres paquets sont répertoriés avec matplotlib et numpy. Il s'agit des dépendances de matplotlib et numpy, et nous n'avons pas besoin de les répertorier de manière explicite dans notre fichier requirements.txt.

Maintenant, nous sommes prêts. Créez un fichier requirements.txt et ajoutez les éléments suivants :

requirements.txt
matplotlib==3.2.2
numpy==1.19.0

Grâce à ce fichier requirements.txt, si vous devez partager le projet demo-app-2 avec un autre développeur, celui-ci pourra créer un environnement virtuel et exécuter l'application correctement.

Créez le fichier requirements.txt automatiquement

L'autre option pour créer un fichier requirements.txt consiste à rediriger la sortie de la commande pip freeze. Par exemple, nous pouvons exécuter :

pip freeze > requirements.txt

Cette commande met le contenu de pip freeze dans le fichier requirements.txt. Jetons un œil à l'intérieur du fichier qui vient d'être créé via la commande cat requirements.txt:

La commande produit la sortie:

cycler==0.10.0
kiwisolver==1.2.0
matplotlib==3.2.2
numpy==1.19.0
pyparsing==2.4.7
python-dateutil==2.8.1
six==1.15.0

À ce stade, vous remarquerez que le fichier requirements.txt répertorie tout le résultat de pip freeze, et pas seulement les paquets que vous installés explicitement : numpy et matplotlib. En effet, leurs dépendances ont aussi été ajoutées. C'est une autre manière, plus explicite, d'écrire un fichier requirements.txt.

Installez des paquets dans votre environnement virtuel à l'aide d'un fichier Requirements

Imaginez maintenant que vous récupériez le projet d'un autre développeur. Le projet possède déjà un fichier requirements.txt que vous pouvez utiliser pour installer des paquets dans votre environnement virtuel. Dans l'idéal, il devrait aussi posséder une documentation !

Considérons un projet demo-app-3 contenant un script deo.py et un fichier requirements.txt.

demo.py
import requests
from bs4 import BeautifulSoup
 
r = requests.get('http://www.example.com')
soup = BeautifulSoup(r.text, features="html.parser")
print(soup.text)
requirements.txt
beautifulsoup4==4.9.1
requests==2.24.0

Notez que dans demo.py, nous utilisons deux paquets : requests et bs4. Ces deux paquets, ainsi que leurs versions, sont répertoriés de manière explicite dans requirements.txt. À ce stade, vous pouvez essayer d'exécuter demo.py à l'aide de Python. Si requests et bs4 sont installés globalement (dans l'idéal, ce n'est pas le cas), le script s'exécutera correctement. Toutefois, même dans ce cas, vous ne pouvez pas savoir si le script s'exécute exactement de la façon prévue par l'auteur du projet, car vous utilisez peut-être des versions de requests et bs4 différentes de celles spécifiées dans requirements.txt.

Pour garantir que vous avez la même configuration que les autres développeurs qui travaillent sur le projet, nous utilisons un environnement virtuel. D'abord, créez et activez un environnement virtuel :

# Creation de l'environnement virtuel Python
python3 -m venv env
 
# Activation de l'environnement virtuel 'env'
source env/bin/activate

Ensuite, nous devons installer les paquets Python répertoriés dans le fichier requirements.txt. Pour ce faire, nous utilisons la commande suivante :

pip install -r requirements.txt

Maintenant, quand vous exécutez pip freeze, vous constatez que vous avez correctement installé requests et bs4, ainsi que leurs dépendances. Vous pouvez enfin exécuter le script demo.py correctement.

python3 ./demo.py

Vous avez réussi à créer un environnement virtuel et à installer les paquets répertoriés dans un fichier requirements.txt. Félicitations !

En résumé

  • Vous devez toujours créer un fichier requirements.txt lorsque vous utilisez un environnement virtuel pour un projet.
  • Si un projet que vous récupérez ne contient pas de fichier requirements.txt, demandez pourquoi à l'auteur. Il n'est pas impoli de poser la question, et il existe peut-être une raison parfaitement valable !

◁ Précédent | ⌂ Retour au sommaire | Suivant ▷

cours/informatique/dev/python/environnement_python/250_gerer_venv_via_fichier_requirements.txt · Dernière modification : 2023/09/25 13:15 de yoann