未使用のMacPortsパッケージを削除する方法は?


94

MacPorts経由でプログラムをインストールするたびに、多くの依存関係を取得してインストールします。上記のプログラムをアンインストールする場合、MacPortsを使用して、使用されていない依存関係をすべて再帰的に削除するにはどうすればよいですか?

回答:


105

あなたがリクエストしたものであるかもしれない葉を誤って切断しないようにするには、port_cutleavesパッケージをインストールしてからhttps://guide.macports.org/#using.common-tasks.keepleanを実行する必要がありsudo port_cutleaves ます


MacPortsの1.9.0を追加sqlite portdbformatし、MacPortsの2.0.0古いドロップflat形式をsqliteポートDBフォーマットは、新規インストールのデフォルトです。1.9.xにアップグレードされた古いインストールでは、引き続きflat形式1が使用されます。1.9.x flatシステムをsqliteMacPorts 2.0にアップグレードするか、portdbformatin の値を 変更してからrootとしてポートコマンドを/opt/local/etc/macports/macports.conf発行することにより、形式に変換できます(例:)。sudo port installed

新しい形式の機能の1つは、「要求された」ポートのインストールと「要求されていない」ポートのインストールを追跡することです。要求されていないポートは、他のポートが依存しているためにインストールされたポートです。leaves擬似ポート名は、他のインストールされたポートは依存しないその上に全ての非要求のポートに拡張します。これを使用して、不要なポートを最初にアンインストールしなかった場合でも、不要なポートを「クリーンアップ」できます(これにより、必要な処理sudo port uninstall --follow-dependencies portnameが行われますが、アンインストールするたびに使用することを忘れない場合のみ)。


アンインストールする前に、既存の葉を調べる必要があります。

port echo leaves

いくつかの一般的な葉(automakegperflibtool、はpkgconfig)共通ポートのビルド時の依存関係しているので、あなたは、「要求」して(したいことsudo port setrequested port1 port2 port3 …だけで、後でそれらを再インストールする必要がそれらをアンインストールしないようにします)。

残っている葉は簡単にアンインストールできます。

sudo port uninstall leaves

注:葉を切り取る前に、「アクティブ」ではなくなったポートの古いバージョンをアンインストールすることもできます。これにより、さらにいくつかのリーフ(つまり、インストールされているが非アクティブなポートの依存関係であるポート)が明らかになる場合があります。

sudo port uninstall inactive

ありますいくつかのセクションMacPortsのガイドも使用するプロセスについて説明しleaves、不要なポートをアンインストールすることは。


11
ありがとう。これは非常に役立ちます。すべてのリーフがクリーンであることを確認するために、エコーリーフを実行し、リーフを連続してアンインストールする必要があるようです。エコー葉は空の結果を返す前に、私は両方のコマンドに少なくとも4回走った
アントニー

6
それwhile sudo port uninstall leaves; do :; doneを自動化するようなことを言うことができます。
トムアンダーソン

2
「指定されたポートに依存するすべてのポートを再帰的にアンインストールする」sudo port uninstall --follow-dependents portnameため、@ ChrisJohnsen は正しくありません--follow-dependents。ここでの正しいオプションは--follow-dependencies、「指定されたポートが依存していたすべてのポートを再帰的にアンインストールします。これにより、要求済みとしてマークされた依存関係または他の依存関係がある依存関係はアンインストールされません」
TachyonVortex

8

ドキュメントから

アンインストールアクションは、インストールされたポートをアンインストールします。

%% sudo port uninstall vile Note

特定のポートが依存しているポートも再帰的にアンインストールするには、‑‑follow‑dependenciesフラグを使用します。これは、要求されたとマークされた依存関係または他の依存関係がある依存関係をアンインストールしません。

ポート自体をアンインストールする前に、特定のポートに依存するすべてのポートを再帰的にアンインストールするには、を使用し ‑‑follow‑dependents flagます。

ポートがインストールされている別のポートの依存関係である場合、アンインストールでは、最初に依存ポートを削除しない限り、ポートは削除されません。この動作を上書きするには、-f(強制)スイッチを使用します。これは明らかに扶養家族を破壊します。何をしているのかわからない限り、ポートを強制的にアンインストールしないでください。

%% sudo port -f uninstall vile

最後の段落の主な注意事項に注意してください。依存関係とはまさにその依存関係であり、異なるアプリは同じ依存関係を必要とする可能性があります。


これが質問に答えるとは思わない。OPは、プログラムとそれが必要とするものを削除するのではなく、プログラムとそれが必要とするものを削除したい。

2
@mankoff:‑‑follow‑dependencies‑‑follow‑dependents。引用された一節は両方を説明していますが、最初の質問のみが質問に適用されます
クリスジョンセン

3
個人的に、私はtiがフィリップは、両方のパラメータを説明することを偉大だと思うので、私たちは、このようなコマンドを発行する時にパラメータとその意味を十分に認識している
アントニー


3

MacPortsのcontribディレクトリにはport_cutleavesというスクリプトがあり、不要な依存関係を削除するために実行できます:http ://trac.macports.org/browser/contrib/ 。アンインストールする各ポートを尋ねられ、必要に応じていくつかのポートを保持できます。


2

ポートのクリーンアップを自動化するスクリプトをいくつか作成しました:https : //github.com/vasi/macports-tools

「macportsfoster」スクリプトは、「list deactivate $(macportsfoster)」がすべてのポートを一度に削除するように順序付けられた、requested-listの何にも必要のないすべてのポートのリストを出力します。


1

他の答えと--follow-dependents旗はあなたが望むことをしないと思います。をインストールしAAが必要な場合B、素晴らしいパッケージ管理システムのおかげで、Bインストールされます。アンインストールするB--follow-dependentsフラグが認識され、削除されAます。しかし、最初に手動でインストールしたものAであるため、より可能性の高いをアンインストールするAとどうなりますか?この場合、B残されます。

finkを使用する場合、debfosterパッケージはシステムをクリーンアップし、未使用の依存関係を削除するように設計されています。

Debfosterは、必要なプログラムが削除されるか、依存関係のないバージョンにアップグレードされたときに、パッケージ(ライブラリなど)をシステムから取り去るのに役立ちます。

一方でdebfosterMacPortsのために動作しません、のポートがあるように見えるdebfoster、例えば、portsfosterそれが中止されているようですが、...

おそらく、現在MacPortsのソリューションは存在しません。


しかし、Debianベースのシステムのdebファイルはdebfosterではありませんか?Mac OS XのMacPortsポートに使用するにはどうすればよいですか?
hpy

OS Xに移植されており、MacPortsとfinkはaptDebianが使用するシステムに基づいています。私はMacPortsを使用していませんが、私はfink install debfosterそれをしました。

MacPortsはaptシステムとは関係がなく、debファイルを使用しません。MacPortsの考え方は、FreeBSDポートまたはNetBSD pkgsrcに関連していますが、実装は非常に異なります。
クリスジョンセン

1
OK。修正していただきありがとうございます。とにかく、debfosterはを通じてうまく動作するように移植されていfinkます。さらに検索すると、MacPorts で動作しないことわかりますが、クローンはあります。例:portsfoster
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.