パッケージのリストがあるとします:
foo
libfoo
bar
baz
quux
そして、foo
がlibfoo
とbar
を必要とし、baz
がquux
を必要とするとします。
そのリストに入れて、このリストから抜け出す方法が欲しい:
foo
baz
つまり-パッケージの最小リストをインストールして、依存関係の解決後にパッケージのリスト全体がインストールされるようにします。
私はあなたが望むことを正確に行うスクリプトを作成しました: https://Gist.github.com/kotarou3/2b311fb7b79ae6b682246b32acf0b7e9
python3-apt
およびpython3-networkx
は依存関係です。パッケージ情報のソースとしてaptパッケージキャッシュを使用します。
パッケージ名自体はstdoutに1行ごとに1つ出力されますが、それらに関するコメント(サイクルの一部など)は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