Explication détaillée de requirements.txt et setup.py en Python

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.

99232b4893b8a7e7989fd36ed1891236.png

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 freezepouvez . 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

Mon résumé 2021

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.

Qu'est-ce que le problème de séquence spatio-temporelle ? Quels modèles sont principalement utilisés pour de tels problèmes ? Quelles sont les principales applications ?

Numéro public : voiture escargot AI

Restez humble, restez discipliné, restez progressiste

e19e3cda943469338a193c36e6f40af8.png

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

Je suppose que tu aimes

Origine blog.csdn.net/qq_33431368/article/details/123587593
conseillé
Classement