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