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 :
Ne pas spécifier les versions de paquets.
Spécifier les versions de paquets exactes.
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.