web-dev-qa-db-fra.com

Différence entre extras_require () et install_requires () dans setup.py?

J'essaie de comprendre la différence entre extras_require() et install_requires() dans setup.py mais je n'ai pas pu l'obtenir. Les deux sont utilisés pour installer les dépendances Python, mais quelle est la différence entre elles?

26
Harish R

Selon la documentation setuptools ,

extras_require
Un dictionnaire mappant les noms des "extras" (fonctionnalités optionnelles de votre projet) sur des chaînes ou des listes de chaînes spécifiant quelles autres distributions doivent être installées pour prendre en charge ces fonctionnalités.

et

install_requires
Une chaîne ou une liste de chaînes spécifiant quelles autres distributions doivent être installées lorsque celle-ci l'est.

La section sur Déclarer des "Extras" (fonctionnalités optionnelles avec leurs propres dépendances) développe ceci:

Parfois, un projet a des dépendances "recommandées", qui ne sont pas requises pour toutes les utilisations du projet. Par exemple, un projet peut offrir une sortie facultative PDF si ReportLab est installé et la prise en charge de reStructuredText si docutils est installé. Ces fonctionnalités facultatives sont appelées "extras" et setuptools vous permet de définir leurs exigences comme De cette façon, d'autres projets qui nécessitent ces fonctionnalités facultatives peuvent forcer l'installation des exigences supplémentaires, en nommant les extras souhaités dans leur install_requires.

La plus grande différence est que les exigences de extras_require ne sont installés que si nécessaire:

Ces exigences ne seront pas automatiquement installées sauf si un autre package en dépend (directement ou indirectement) en incluant les "extras" souhaités entre crochets après le nom du projet associé. (Ou si les extras étaient répertoriés dans une spécification d'exigence sur la ligne de commande EasyInstall.)

Donc, pour résumer:

  • Si la dépendance est nécessaire pour exécuter votre projet, mettez-la dans install_requires. Ils seront toujours installés.
  • Si votre projet a des fonctionnalités optionnelles qui ajoutent des dépendances, mettez ces dépendances dans extras_require. Ces dépendances ne seront pas installées sauf si cette fonctionnalité est demandée par l'utilisateur ou un autre package.
25
user812786

Je ne suis pas sûr de l'utilisation officielle, mais j'utilise extras_require() pour spécifier les dépendances conditionnelles.

Dans mon cas -

extras_require={":python_version<'3.5'": ["scandir"]}

Théoriquement, cela devrait être disponible via install_requires() lui-même, mais cela ne fonctionne que comme il le devrait à partir de la version X.XX (plusieurs revendications quant à la version qui commence à le faire correctement) de setuptools.

Cet article l'explique bien: Conditionnel Python Dépendances

6
Jay