web-dev-qa-db-fra.com

Comment trouver des dépendances de niveau supérieur dans une liste de paquets deb?

Supposons que j'ai une liste de packages:

foo
libfoo
bar
baz
quux

Et supposons que foo nécessite libfoo et bar, et baz nécessite quux.

Je veux un moyen de mettre cette liste et de sortir cette liste:

foo
baz

C'est à dire. - Je veux que la liste minimale de packages à installer qui, après la résolution des dépendances, entraînerait l'installation de la liste complète des packages.

3
dmd

J'ai créé un script qui fait exactement ce que vous voulez: https://Gist.github.com/kotarou3/2b311fb7b79ae6b682246b32acf0b7e9

python3-apt et python3-networkx sont les dépendances. Il utilise le cache de packages apt comme source d'informations sur les packages.

Les noms des packages eux-mêmes sont affichés un par ligne vers stdout, tandis que tous les commentaires à leur sujet (comme s'ils font partie d'un cycle) sont vers stderr

Exemple:

$ ./find-top-level-packages.py nginx nginx-core zlib1g firefox
firefox
nginx
$ ./find-top-level-package.py -h
usage: find-top-level-packages.py [-h] [--root-dir dir]
                                  [--follow-unspecified-packages]
                                  [--no-use-recommends]
                                  [--show-missing-recommends]
                                  [package [package ...]]

Find top-level packages of the dependency graph

positional arguments:
  package               package names to use (default: all installed packages)

optional arguments:
  -h, --help            show this help message and exit
  --root-dir dir        act as if chrooted in the specified directory
  --follow-unspecified-packages
                        follow dependencies of packages not part of the
                        initial input
  --no-use-recommends   don't use recommended packages for the dependency
                        graph
  --show-missing-recommends
                        list missing recommended packages suffixed with a dash
4
小太郎

Je n'ai pas assez de réputation pour ajouter un commentaire, donc obligé d'écrire une réponse séparée. Mais ce sont des informations supplémentaires pour la réponse fournie par 小 太郎

Son script fonctionne à merveille. assurez-vous d'installer la bonne version de networkx pour qu'elle fonctionne correctement.

Sudo pip3 install networkx == 1.11

0
melchi