Quand je fais un pip freeze, je vois un grand nombre de packages Python que je n'ai pas installés explicitement, par exemple
$ 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.)
Existe-t-il un moyen pour moi de déterminer pourquoi pip a installé ces packages dépendants particuliers? En d'autres termes, comment déterminer le package parent qui avait ces packages comme dépendances?
Par exemple, je pourrais vouloir utiliser Twisted et je ne veux pas dépendre d'un paquet jusqu'à ce que j'en sache plus sur le fait de ne pas le désinstaller ou le mettre à niveau accidentellement.
pipdeptree -r
"Affiche l'arborescence des dépendances de manière inverse, c'est-à-dire que les sous-dépendances sont répertoriées avec la liste des paquets qui en ont besoin sous elles."pipdeptree
c'est génial. Malheureusement, il ne semble pas prendre en compte les dépendances pour les packages installés par conda: par exemple dans un environnement conda oùmatplotlib
etnumpy
ont été installés à l'aide de pip, mais ascipy
été installé à l'aide de conda,scipy
apparaît dans le pipdeptree comme n'ayant pas de dépendances et pas de dépendants (pip show scipy
montre également non exigences).python -m pipdeptree
autrement (même lorsque l'exécutable est installé sur le virtualenv), il ne répertorie que les dépendances système.La
pip show
commande affichera quels packages sont requis pour le package spécifié (notez que le package spécifié doit déjà être installé):pip show
a été introduit dans la version 1.4rc5 de pipla source
pip show
a été introduit dans la version 1.4rc5, et est présent dans le (actuel au moment de la rédaction) 1.4.1pip freeze | grep -v "\-e" | sed s/\=\=.*// | awk 'system("pip show " $1)' | grep -E '^(Name:|Requires:)' | sed s/Name:/\\\nName:/
- mais il semble que pipdeptree est maintenant une meilleure solution.Comme je l'ai récemment dit sur un fil hn , je recommande ce qui suit:
Avoir un
requirements.txt
fichier commenté avec vos principales dépendances:Installer vos dépendances:
pip install -r requirements.txt
. Vous obtenez maintenant la liste complète de vos dépendances avecpip freeze -r requirements.txt
:Cela vous permet de conserver la structure de vos fichiers avec des commentaires, en séparant bien vos dépendances des dépendances de vos dépendances. De cette façon, vous aurez un temps beaucoup plus agréable le jour où vous devrez supprimer l'un d'eux :)
Notez ce qui suit:
requirements.raw
avec le contrôle de version pour reconstruire votre fichier completrequirements.txt
.pip install --no-install <package_name>
pour lister les exigences spécifiques.la source
pip freeze -r requirements.txt
n'est pas largement utilisé. Très utile pour maintenir les dépendances et sous-dépendances.pip install
ne prend plus en charge--no-install
.Vous pouvez également utiliser une commande d'une ligne qui redirige les packages des exigences vers pip show.
la source
<package_name>==<package_version>
.Tout d'abord
pip freeze
affiche tous les packages Python actuellement installés, n'utilisant pas nécessairement PIP.Deuxièmement, les packages Python contiennent les informations sur les packages dépendants ainsi que les versions requises . Vous pouvez voir les dépendances de pkg particuliers en utilisant les méthodes décrites ici . Lorsque vous mettez à niveau un package, le script d'installation comme PIP gérera la mise à niveau des dépendances pour vous.
Pour résoudre la mise à jour des packages, je recommande d'utiliser les fichiers d'exigences PIP . Vous pouvez définir les packages et les versions dont vous avez besoin et les installer à la fois à l'aide de pip install.
la source
Utilisez pipupgrade !
pipupgrade affiche un graphique de dépendance et met en évidence chaque package pour une éventuelle mise à jour (basée sur le versionnage sémantique). Il affiche également les dépendances enfants en conflit d'une jolie manière.
pipupgrade
assure également la mise à niveau des packages présents dans plusieurs environnements Python. Compatible avec Python2.7 +, Python3.4 + et pip9 +, pip10 +, pip18 +, pip19 +.la source
(solution de contournement, pas vraie réponse)
J'ai eu le même problème, avec lxml ne s'installant pas et moi voulant savoir qui avait besoin de lxml. Pas de qui lxml avait besoin . J'ai fini par contourner le problème.
en notant où mes packages de site étaient placés.
allez-y et grep récursif pour l'importation (le dernier --invert-match de grep sert à supprimer les propres fichiers de lxml).
Oui, pas de réponse sur la façon d'utiliser pip pour le faire, mais je n'ai pas obtenu de succès avec les suggestions ici, pour une raison quelconque.
la source
J'ai écrit un script rapide pour résoudre ce problème. Le script suivant affichera le (s) package (s) parent (s) pour tout package donné. De cette façon, vous pouvez être sûr qu'il est sûr de mettre à niveau ou d'installer un package particulier. Il peut être utilisé comme suit:
dependants.py PACKAGENAME
la source
get_installed_distributions()
méthode n'est plus disponible. github.com/pypa/pip/issues/5243