問題の説明
aptとaptitudeの両方がどのパッケージがインストールされているかを覚えています。自動的に他のパッケージの依存関係として、または手動いくつかの理由。さまざまな理由でリストに手動バッグは不必要に大きくなる可能性があり、時間の経過とともに合計が始まります。これらのパッケージは、特に要求された場合にのみ削除されます。
一般的な例としては、何らかの理由でパッチとしてインストールできますが、後でそれに依存するソフトウェアの一部がインストールされている場合は、サイレントインストールとして表示されるライブラリパッケージがあります。ただし、これが発生しない場合は、そのパッケージに依存するパッケージが削除されてもインストールされたままになります。場合によっては、同様のツールを使用して残りのdeborphan
パッケージを見つけることができますが、多くの推測を実行する必要があり、体系的なソリューションではありません。
考えられる解決策の説明
だから私は、パッケージを削除せずにサイレントインストールとしてマークできるパッケージを見つける方法を探しています。これは、現在手動でインストールされているとマークされていますが、インストールされている他のパッケージの依存関係(または推奨される依存関係)であるパッケージを見つけることを意味します。その後、これらのパッケージは次のように表示できます。自動的にもう必要ない場合は、別のソフトウェアをインストールしてアンインストールします。
似たようなツールを作れると思いました。libapt用のPythonバインディングしかし、似たようなものがすでに存在する場合は、車輪を再発明したくありません。
答え1
手動でインストールされたパッケージと、インストールされたパッケージの必須または推奨の依存関係であるパッケージを検索します。資格があれば可能です。
aptitude search -q -F %p '?installed !?automatic (?reverse-depends(?installed .*) | ?reverse-recommends(?installed .*))'
各パッケージにどの依存関係があるかを示す方法はないと思います。この情報が必要な場合は、Pythonが最善の選択です。この非常に速くて汚いスクリプトはトリックを実行しているようです(ほとんどの分離、バージョンの依存関係、辞書の依存関係などに関連するいくつかの非直接的なケースでは正しくないと思います)。
#!/usr/bin/env python2
import apt
packages = apt.Cache()
covered = {}
# Inverse dependency computation: for each installed package, record which
# packages require it (as Depends: or Recommends:).
for p in packages:
if p.installed:
for l in p.installed.dependencies + p.installed.recommends:
for d in l:
if packages.has_key(d.name) and packages[d.name].installed:
if not covered.has_key(d.name):
covered[d.name] = []
covered[d.name] += [p.name]
# Print out the manually installed packages that are required by another
# installed package, as well as the requiring package(s).
for p in sorted(covered.keys()):
if not packages[p].is_auto_installed:
print(' '.join([p] + covered[p]))
答え2
apt
パッケージマネージャは、次のパッケージを簡単に見つける方法を提供しますapt-mark
。
# apt-mark showmanual
これにより、手動インストールとしてマークされたすべてのパッケージが表示されます。以下を使用して、これらのいずれかを自動的に変更できます。
# apt-mark auto PACKAGE_NAME
車
auto は、パッケージを自動的にインストール済みとしてマークするために使用されます。この場合、手動でインストールされたパッケージがもはや依存していない場合、パッケージは削除されます。
手動
手動は、パッケージを手動でインストールしたとマークするために使用されます。これにより、依存する他のパッケージがない場合、そのパッケージは自動的に削除されません。
自動車ショー
showautoは自動的にインストールされたパッケージのリストを印刷するために使用され、各パッケージは新しい行に表示されます。パッケージが提供されない場合は、自動的にインストールされたすべてのパッケージが一覧表示されます。パッケージが提供されると、自動的にインストールされたパッケージのみが表示されます。
本を見せる
showmanualは、手動でインストールされたパッケージのリストを印刷することを除いて、showautoと同じ方法で使用されます。