270 votes

Identification de la relation de dépendance pour les paquets python installés avec pip

Lorsque je fais un freeze pip, je vois un grand nombre de paquets Python que je n'ai pas explicitement installés, par ex.

$ pip freeze
Cheetah==2.4.3
GnuPGInterface==0.3.2
Landscape-Client==11.01
M2Crypto==0.20.1
PAM==0.4.2
PIL==1.1.7
PyYAML==3.09
Twisted-Core==10.2.0
Twisted-Web==10.2.0
(etc.)

Y a-t-il un moyen pour moi de déterminer pourquoi pip a installé ces paquets dépendants particuliers ? En d'autres termes, comment puis-je déterminer le paquet parent qui avait ces paquets comme dépendants ?

Par exemple, je pourrais vouloir utiliser Twisted et ne pas dépendre d'un paquet avant d'en savoir plus sur la façon de ne pas le désinstaller ou le mettre à jour accidentellement.

127voto

BernardoFire Points 1295

Je viens d'envoyer une demande de pull à pip ( github.com/pypa/pip/pull/517 ), qui ajoute la commande "pip show". Si vous faites "pip show package_name" (specloud par exemple) :

$ pip show specloud

Package: specloud
Version: 0.4.4
Requires:
nose
figleaf
pinocchio

il y a les paquets de dépendances. Jusqu'à ce qu'ils acceptent ma pull request, vous pouvez installer pip depuis ma fork : github.com/bernardofire/pip (installer la branche "issue33")

27voto

Maxime R. Points 2199

Comme je l'ai dit récemment dans un fil du hn je vous recommande ce qui suit :

Avoir un commentaire requirements.txt avec vos principales dépendances :

## this is needed for whatever reason
package1

Installez vos dépendances : pip install -r requirements.txt . Maintenant vous obtenez la liste complète de vos dépendances avec pip freeze -r requirements.txt :

## this is needed for whatever reason
package1==1.2.3

## The following requirements were added by pip --freeze:
package1-dependency1==1.2.3
package1-dependency1==1.2.3

Cela vous permet de conserver votre structure de fichiers avec des commentaires, en séparant joliment vos dépendances des dépendances de vos dépendances. Ainsi, vous aurez plus de facilité le jour où vous devrez supprimer l'une d'entre elles :)

Notez ce qui suit :

  • Vous pouvez avoir un requirements.raw avec le contrôle de version pour reconstruire votre requirements.txt .
  • Attention aux urls git qui sont remplacées par des noms d'œufs dans le processus.
  • Les dépendances de vos dépendances sont toujours triées par ordre alphabétique, vous ne savez donc pas directement lequel est requis par quel paquet, mais à ce stade, vous n'en avez pas vraiment besoin.
  • Utilisez pip install --no-install <package_name> pour énumérer les exigences spécifiques.
  • Utilisez virtualenv si vous ne le faites pas.

3voto

Secator Points 9827

Tout d'abord pip freeze affiche tous les paquets Python actuellement installés, sans nécessairement utiliser PIP.

Ensuite, les paquets Python contiennent les informations sur les paquets dépendants ainsi que versions requises . Vous pouvez voir les dépendances d'un pkg particulier en utilisant les méthodes suivantes décrit ici . Lorsque vous mettez à jour un paquet, l'installateur script comme PIP se chargera de la mise à jour des dépendances pour vous.

Pour résoudre la mise à jour des paquets, je recommande d'utiliser Fiches d'exigences PIP . Vous pouvez définir les paquets et les versions dont vous avez besoin, et les installer en une seule fois en utilisant pip install.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X