3

Suppose I have a list of packages:

foo
libfoo
bar
baz
quux

And suppose foo requires libfoo and bar, and baz requires quux.

I want a way to put in that list, and get out this list:

foo
baz

I.e. - I want the minimal list of packages to install which would - after dependency resolution - cause the entire list of packages to be installed.

Daniel
  • 460
  • apt-cache depends <packagename> shows the package along with it's dependencies. – Avinash Raj Feb 18 '14 at 18:06
  • may this help you dmd http://askubuntu.com/questions/128524/how-to-list-package-dependees-reverse-dependencies – Raja G Feb 18 '14 at 18:13
  • The initial list is the result of my predecessor being dumb and installing a bunch of packages we need for a product, but then giving me a list of the diffs between a base ubuntu install and the install after he did those package installs. He no longer knows which were specifically selected. – Daniel Feb 18 '14 at 18:14
  • This is super useful for backing up and/or upgrading Ubuntu, especially when you're looking to have a prune of your packages. Thanks! – Chris Watts Dec 22 '17 at 09:35

2 Answers2

5

I created a script that does exactly what you want: https://gist.github.com/kotarou3/2b311fb7b79ae6b682246b32acf0b7e9

python3-apt and python3-networkx are the dependencies. It uses the apt package cache as the source of package information.

Package names themselves are output one per line to stdout, while any comments about them (such as if they are part of a cycle) are to stderr

Example:

$ ./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
小太郎
  • 331
  • 3
  • 6
1

I dont have enough reputation to add a comment, hence forced to write a separate answer. But this is additional information for the answer provided by 小太郎

His script works awesome. make sure you install the correct version of networkx for it to work correctly.

sudo pip3 install networkx==1.11

melchi
  • 191