• 6 heures
  • Facile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 07/03/2022

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

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

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 ? :euh:

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  :

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 :

matplotlib==3.2.2
numpy>1.12
requests>2.0,<3.0

Cela 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 possibilités :

  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 :

matplotlib==3.2.2
numpy==1.19.0

Enregistrez le fichier ! Votre projet doit maintenant ressembler à ce qui suit :

$ ls
demo.py          env              requirements.txt
$ cat requirements.txt
matplotlib==3.2.2
numpy==1.19.0

Formidable ! :D Vous avez réussi à créer un fichier requirements.txt  , et 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'aide de pip

L'autre option pour créer un fichier requirements.txt  consiste à utiliser 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éé :

$ cat requirements.txt
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 !

Tout d'abord, téléchargez le script et ce fichier requirements.txt. Placez le projet demo-app-3  dans votre dossier projects  . Depuis votre terminal, placez-vous dans demo-app-3  et vérifiez-en le contenu :

$ ls
demo-app   demo-app-2 demo-app-3
$ cd demo-app-3/
$ ls
demo.py          requirements.txt

Vérifions maintenant le contenu des deux fichiers :

$ cat 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)

$ cat 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 :

$ python -m venv env
$ ls
demo.py          env              requirements.txt
$ 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
Collecting beautifulsoup4==4.9.1 (from -r requirements.txt (line 1))
Utilisation de https://files.pythonhosted.org/packages/66/25/ff030e2437265616a1e9b25ccc864e0371a0bc3adb7c5a404fd661c6f4f6/beautifulsoup4-4.9.1-py3-none-any.whl mis en cache
Collecting requests==2.24.0 (from -r requirements.txt (line 2))
Using cached 
https://files.pythonhosted.org/packages/45/1e/0c169c6a5381e241ba7404532c16a21d86ab872c9bed8bdcd4c423954103/requests-2.24.0-py2.py3-none-any.whl
Collecting soupsieve>1.2 (from beautifulsoup4==4.9.1->-r requirements.txt (line 1))
Using cached 
https://files.pythonhosted.org/packages/6f/8f/457f4a5390eeae1cc3aeab89deb7724c965be841ffca6cfca9197482e470/soupsieve-2.0.1-py3-none-any.whl
Collecting idna<3,>=2.5 (from requests==2.24.0->-r requirements.txt (line 2))
Using cached 
https://files.pythonhosted.org/packages/89/e3/afebe61c546d18fb1709a61bee788254b40e736cff7271c7de5de2dc4128/idna-2.9-py2.py3-none-any.whl
Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 (from requests==2.24.0->-r requirements.txt (line 2))
Using cached 
https://files.pythonhosted.org/packages/e1/e5/df302e8017440f111c11cc41a6b432838672f5a70aa29227bf58149dc72f/urllib3-1.25.9-py2.py3-none-any.whl
Collecting certifi>=2017.4.17 (from requests==2.24.0->-r requirements.txt (line 2))
Using cached 
https://files.pythonhosted.org/packages/5e/c4/6c4fe722df5343c33226f0b4e0bb042e4dc13483228b4718baf286f86d87/certifi-2020.6.20-py2.py3-none-any.whl
Collecting chardet<4,>=3.0.2 (from requests==2.24.0->-r requirements.txt (line 2))
Using cached 
https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl
Installing collected packages: soupsieve, beautifulsoup4, idna, urllib3, certifi, chardet, requests
Successfully installed beautifulsoup4-4.9.1 certifi-2020.6.20 chardet-3.0.4 idna-2.9 requests-2.24.0 soupsieve-2.0.1 urllib3-1.25.9

Maintenant, quand vous exécutez pip freeze  , vous constatez que vous avez correctement installé requests  et bs4  , ainsi que certaines de leurs dépendances :

$ pip freeze
beautifulsoup4==4.9.1
certifi==2020.6.20
chardet==3.0.4
idna==2.9
requests==2.24.0
soupsieve==2.0.1
urllib3==1.25.9

Vous pouvez enfin exécuter le script demo.py  correctement :

$ python demo.py

Example Domain

Example Domain
This domain is for use in illustrative examples in documents. You may use this
domain in literature without prior coordination or asking for permission.
More information...

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

Si vous recherchez une démonstration plus interactive, regardez la vidéo ci-dessous :

Exercice

Tâche 1

Vous occupez un poste au service des ventes, et un membre de votre équipe travaille sur un projet Python et voudrait le partager avec vous.

Vous pouvez télécharger le code ici : tâche 1

Votre tâche consiste à créer un environnement virtuel, installer les paquets requis répertoriés dans le fichier requirements.txt  et exécuter l'application : que fait-elle ?

Regardez cette vidéo pour voir une solution de l'exercice :

Tâche 2

Un autre membre de votre équipe travaille sur un autre projet Python, mais n'est pas aussi expérimenté que vous. Son projet ne contient pas de fichier requirements.txtƒ.

Téléchargez son projet ici : tâche 2.

Voyez si vous pouvez faire en sorte qu'il s'exécute dans un environnement virtuel. Vous aurez peut-être besoin d'examiner son code pour savoir quels paquets vous devez installer. Une fois que vous aurez exécuté l'application correctement, créez un fichier   requirements.txt  pour que quelqu'un d'autre puisse travailler sur le projet au besoin. Une fois que vous aurez terminé, vous pourrez tester le fonctionnement de votre fichier   requirements.txt  de la façon suivante : supprimez votre environnement virtuel, créez-en un autre, utilisez votre fichier   requirements.txt  pour installer les paquets Python, puis exécutez l'application.

Regardez cette vidéo pour voir une solution de l'exercice :

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 !

Maintenant que vous savez utiliser les fichiers Requirements, nous allons passer à la suppression des environnements virtuels.

Exemple de certificat de réussite
Exemple de certificat de réussite