Предположим, у меня есть список пакетов:
foo
libfoo
bar
baz
quux
И предположим, что foo
требует libfoo
и bar
, а baz
требует quux
.
Я хочу добавить этот список и вывести этот список:
foo
baz
Т.е. - Я хочу установить минимальный список пакетов, который после разрешения зависимостей приведет к установке всего списка пакетов.
Я создал скрипт, который делает именно то, что вы хотите: https://gist.github.com/kotarou3/2b311fb7b79ae6b682246b32acf0b7e9
python3-apt
и python3-networkx
являются зависимостями. Он использует кэш пакета apt в качестве источника информации о пакете.
Сами имена пакетов выводятся по одному на строку в stdout, а любые комментарии о них (например, если они являются частью цикла) относятся к stderr
Пример:
$ ./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
У меня недостаточно репутации, чтобы добавить комментарий, поэтому я вынужден написать отдельный ответ. Но это дополнительная информация для ответа, предоставленного 小 太郎
Его сценарий работает потрясающе. убедитесь, что вы установили правильную версию networkx для правильной работы.
sudo pip3 install networkx == 1,11