Réimprimé de : Deephub Imba
La gestion des dépendances dans un projet Python peut être difficile pour les débutants, un problème qui a toujours été et a fait l'objet de plaintes.
Dans l'article d'aujourd'hui, nous verrons comment gérer correctement les dépendances pour les projets Python. Plus précisément, le but du fichier requirements.txt sera discuté et comment utiliser setuptools pour distribuer un package Python personnalisé et permettre à d'autres utilisateurs de l'utiliser et de le développer davantage. De plus, le but des fichiers d'installation (c'est-à-dire setup.cfg et setup.py) et comment les utiliser avec le fichier requirements seront discutés, ce qui peut faciliter le processus de développement et de redistribution des packages.
Quelles sont les dépendances d'un projet Python
Commençons par les dépendances de packages ; décrivez ce qu'elles sont et comment les gérer correctement, car cela peut faciliter la maintenance des projets Python.
En termes simples, les dépendances sont d'autres packages Python externes dont dépend notre projet Python.Par exemple, dans le sens de l'IA, les packages les plus utilisés sont Numpy et Pandas. En Python, ces dépendances se trouvent généralement dans le Python Package Index (PyPI) ou d'autres outils de gestion (tels que Nexus). Nous utiliserons PyPI comme exemple plus tard car c'est l'outil de gestion de packages le plus couramment utilisé par tout le monde.
Maintenant, notre propre projet Python peut avoir besoin de référencer une version spécifique d'un package tiers qui a des dépendances. Cette situation peut entraîner des conflits de dépendance, car toutes nos dépendances ont (au moins) deux dépendances qui peuvent dépendre du même package, mais chacune nécessite une version spécifique de ce package externe (disons qu'une nécessite 1.0, tandis qu'une nécessite 2.0). Dans ce cas particulier, nous devons indiquer à pip ce qu'il faut faire des dépendances et de quelles versions spécifiques nous avons besoin.
En général, nous avons besoin de requirements.txt pour spécifier les dépendances et les versions du projet, alors regardons d'abord le format de requirements.txt
fichier requirements.txt
requirements.txt est un fichier qui liste toutes les dépendances d'un projet Python. Comme mentionné, il peut également contenir des dépendances de dépendances. Les colonnes peuvent spécifier une version spécifique (en utilisant ==), >= ou <=, ou même les deux, en plus du nom du package dépendant.
Exemple de fichier requirements.txt
matplotlib>=2.2
numpy>=1.15.0, <1.21.0
pandas
pytest==4.0.1
Ces dépendances peuvent ensuite être installées via pip (généralement dans un environnement virtuel) à l'aide de la commande suivante :
pip install -r requirements.txt
Dans l'exemple ci-dessus, nous avons spécifié certaines dépendances. Par exemple, pour un package pandas qui n'a pas de version associée, pip installera la dernière version normalement, sauf si l'une des autres dépendances est en conflit avec elle (en cas de conflit, pip installera la dernière version de pandas qui satisfait les conditions spécifié par les dépendances restantes). Pour pytest, le gestionnaire de packages installera une version spécifique (c'est-à-dire 4.0.1), tandis que pour matplotlib, la dernière version au moins supérieure ou égale à 2.2 sera installée (cela dépend encore une fois s'il existe d'autres dépendances avec des exigences spécifiques, sinon, il sera installé avec la dernière version des conditions). Pour les packages numpy, pip essaiera d'installer la dernière version entre 1.15.0 (inclusif) et 1.21.0 (exclusif).
Une fois toutes les dépendances installées, vous pip freeze
pouvez . Cette commande listera tous les packages et leurs versions spécifiques (c'est-à-dire ==).
requirements.txt est très utile, mais ce n'est que pour le développement et la publication de notre projet (comme le déploiement en ligne, etc.). Si vous souhaitez publier votre code sur PyPI pour que d'autres puissent l'utiliser, vous avez besoin de plus que ce fichier.
outils de configuration en Python
setuptools est un package construit sur distutils qui aide les développeurs à publier rapidement des packages Python. Entre autres choses, il fournit des fonctionnalités qui facilitent la gestion des dépendances.
Lorsque vous souhaitez publier un package, vous devez généralement renseigner certaines métadonnées, telles que le nom du package, la version, les dépendances, le point d'entrée, etc. setuptools fournit des fonctions pour simplifier ces opérations.
Les métadonnées du projet et d'autres informations doivent être définies dans le fichier setup.py, comme la démonstration suivante :
from setuptools import setup
setup(
name='demo',
author='deephub',
version='0.1',
install_requires=[
'pandas',
'numpy',
'matplotlib',
],
# ... more options/metadata
)
Les informations que nous remplissons sont purement déclaratives. Une meilleure approche consiste donc à définir ces métadonnées et ces informations dans un fichier appelé setup.cfg, puis à appeler simplement setup() dans le fichier setup.py . Le fichier setup.cfg ressemble à ceci :
[metadata]
name = demo
author = deephub
version = 0.1
[options]
install_requires =
pandas
numpy
matplotlib
Cela conserve un minimum de code dans notre fichier setup.py :
from setuptools import setup
if __name__ == "__main__":
setup()
Le paramètre install_requires ci-dessus est similaire à requirements.txt, vous pouvez utiliser les opérateurs <, >, <=, >=, == ou ! =, suivi d'un identifiant de version. Lorsque le projet est installé, les dépendances sont téléchargées et installées selon cette configuration.
Avons-nous besoin des fichiers requirements.txt et setup.py/setup.cfg ?
Cela doit être traité au cas par cas. Le premier entre requirements.txt et setup.py est généralement utilisé pour implémenter différentes exigences :
S'il est principalement utilisé à des fins de développement de projet, et n'est pas destiné à être publié sur pypi, requirements.txt est suffisant (même si le package est développé sur plusieurs machines)
Si le package n'est développé que sur une seule machine, mais doit être publié sur pypi en tant que package pip, alors setup.py/setup.cfg est suffisant.
Si le package est développé sur plusieurs machines et doit être publié sur pypi, cela nécessite requirements.txt (plusieurs machines ont besoin du même environnement de développement) et les fichiers setup.py/setup.cfg (publiés sur pypi) ).
Une autre est que si vous utilisez les deux, le fichier setup.py (setup.cfg) doit contenir une liste de dépendances abstraites, tandis que le fichier requirements.txt doit contenir des dépendances spécifiques avec des broches spécifiques pour chaque version de package (utilisez == pour spécifier des versions dépendances).
Voici la définition officielle de la documentation Python :
install_requires (c'est-à-dire setup.py ) définit les dépendances d'un seul projet, tandis que requirements.txt est généralement utilisé pour définir l'environnement Python complet.
Bien que install_requires ait peu d'exigences, requirements.txt contient généralement une liste exhaustive de versions corrigées pour permettre des installations reproductibles pour un environnement complet.
De : https://packaging.python.org/en/latest/discussions/install-requires-vs-requirements/#requirements-files
Résumer
Cet article traite de l'importance d'une bonne gestion des dépendances lors du développement de projets et d'applications Python. Il décrit également l'objectif du fichier requirements.txt et comment l'utiliser avec les fichiers de configuration setuptools (c'est-à-dire setup.py et setup.cfg) pour s'assurer que d'autres développeurs peuvent installer, exécuter, développer et même tester les packages Python de code source. .code.
setuptools ne remplace pas complètement le fichier requirements.txt. Et dans la plupart des cas, ces deux fichiers peuvent devoir exister en même temps, afin que les dépendances des packages puissent être correctement gérées et les packages publiés.
Auteur : Giorgos Myrianthous
Lecture recommandée:
Mon partage de recrutement scolaire Internet 2022
Parler de la différence entre la publication d'algorithme et la publication de développement
Récapitulatif des salaires en recherche et développement en recrutement scolaire sur Internet
Pour les séries chronologiques, tout ce que vous pouvez faire.
Numéro public : voiture escargot AI
Restez humble, restez discipliné, restez progressiste
Envoyez [Snail] pour obtenir une copie de "Hands-on AI Project" (AI Snail Car)
Envoyez [1222] pour obtenir une bonne note de brossage leetcode
Envoyez [AI Four Classics] pour obtenir quatre livres électroniques classiques sur l'IA