Jawaban:
Untuk menghindari pemotongan daun yang mungkin merupakan hal yang Anda minta secara tidak sengaja, Anda harus menginstal port_cutleaves
paket kemudian jalankan sudo port_cutleaves
https://guide.macports.org/#using.common-tasks.keeplean
MacPorts 1.9.0 menambahkansqlite
portdbformat
dan MacPorts 2.0.0 menjatuhkan flat
format lama . Format sqlite
port DB adalah default untuk instalasi baru; instalasi lama yang ditingkatkan ke 1.9.x akan terus menggunakan flat
format 1 . Anda dapat mengonversi flat
sistem 1.9.x ke sqlite
format dengan memutakhirkan ke MacPorts 2.0 atau dengan mengubah portdbformat
nilai di /opt/local/etc/macports/macports.conf
lalu mengeluarkan perintah port sebagai root (misalnya sudo port installed
).
Salah satu fitur format baru adalah bahwa ia melacak instalasi port "diminta" versus "tidak diminta". Port yang tidak diminta adalah port yang hanya diinstal karena beberapa port lain bergantung padanya. The leaves
pseudo-portname memperluas ke semua port unrequested di mana tidak ada port yang terpasang lainnya tergantung. Anda dapat menggunakan ini untuk "membersihkan" port yang tidak dibutuhkan bahkan jika Anda awalnya tidak mencopotnya sudo port uninstall --follow-dependencies portname
(yang akan melakukan apa yang Anda inginkan, tetapi hanya jika Anda ingat untuk menggunakannya setiap kali Anda mencopot sesuatu).
Anda harus memeriksa dedaunan yang ada sebelum mencopotnya.
port echo leaves
Beberapa daun umum ( automake
, gperf
, libtool
, pkgconfig
) adalah membangun-waktu dependensi dari port umum, sehingga Anda mungkin ingin “permintaan” mereka ( sudo port setrequested port1 port2 port3 …
) untuk menghindari menguninstall mereka hanya harus menginstal ulang nanti.
Anda dapat mencopot semua daun yang tersisa dengan mudah:
sudo port uninstall leaves
Catatan: Sebelum memangkas dedaunan Anda, Anda mungkin juga ingin menghapus instalasi versi port lama yang tidak lagi “aktif”. Ini dapat mengungkapkan beberapa daun lagi (yaitu port yang dependensi port yang diinstal, tetapi tidak aktif):
sudo port uninstall inactive
Ada beberapa bagian dalam Panduan MacPorts yang juga menjelaskan proses penggunaan leaves
untuk menghapus instalasi port yang tidak dibutuhkan.
while sudo port uninstall leaves; do :; done
mengotomatisasi itu.
sudo port uninstall --follow-dependents portname
salah, karena --follow-dependents
akan "menghapus secara rekursif semua port yang bergantung pada port yang ditentukan". Opsi yang benar di sini adalah --follow-dependencies
, yang akan "menghapus secara rekursif semua port yang bergantung pada port yang ditentukan. Ini tidak akan menghapus dependensi yang ditandai sebagai diminta atau yang memiliki tanggungan lain."
Tindakan uninstall akan menghapus instalasi port yang diinstal.
%% sudo port uninstall vile Note
Untuk juga menghapus instalasi port yang bergantung pada port yang diberikan secara rekursif, gunakan
‑‑follow‑dependencies
bendera. Ini tidak akan menghapus ketergantungan yang ditandai sebagai diminta atau yang memiliki tanggungan lain.Untuk menghapus secara instal semua port yang bergantung pada port yang diberikan sebelum mencopot port itu sendiri, gunakan
‑‑follow‑dependents flag
.Jika suatu port merupakan dependensi dari port lain yang diinstal, uninstall tidak akan menghapusnya kecuali Anda menghapus port dependen terlebih dahulu. Untuk mengesampingkan perilaku ini, gunakan sakelar -f (paksa). Ini jelas akan mematahkan tanggungan. Jangan paksa mencopot porta kecuali Anda tahu apa yang Anda lakukan.
%% sudo port -f uninstall vile
Perhatikan peringatan utama di paragraf terakhir. Ketergantungan persis seperti itu — dependensi — dan aplikasi yang berbeda dapat (akan) membutuhkan dependensi yang sama.
‑‑follow‑dependencies
vs ‑‑follow‑dependents
.; bagian yang dikutip menggambarkan keduanya, tetapi hanya yang pertama yang berlaku untuk pertanyaan
Perintah untuk menghapus port dan tanggungannya adalah:
sudo port uninstall foo --follow-dependents
Namun, jika port yang Anda uninstall memiliki tanggungan, port itu tidak akan dihapus tanpa -f
flag (force).
Tentu saja Anda harus mulai dengan membaca Panduan MacPorts secara khusus melihat ke bagian Uninstall guide.
Ada juga skrip di direktori contrib MacPorts yang disebut port_cutleaves yang dapat Anda jalankan untuk menghapus dependensi yang tidak dibutuhkan: http://trac.macports.org/browser/contrib/ . Ini akan meminta Anda untuk setiap port yang harus dihapus dan memungkinkan menyimpannya, jika Anda mau.
Saya telah menulis beberapa skrip untuk mengotomatiskan pembersihan port: https://github.com/vasi/macports-tools
Skrip 'macportsfoster' akan menampilkan daftar semua port yang tidak diperlukan oleh apa pun dalam daftar yang diminta, dipesan sedemikian rupa sehingga 'port menonaktifkan $ (macportsfoster)' akan menghapus semuanya dalam satu kesempatan.
Saya pikir jawaban yang lain, dan --follow-dependents
bendera, tidak melakukan apa yang Anda inginkan. Jika Anda menginstal A
, dan A
membutuhkan B
, maka berkat sistem manajemen paket yang luar biasa, B
akan diinstal untuk Anda. Anda dapat menghapus B
dan --follow-dependents
bendera akan menyadari dan menghapus A
. Tetapi bagaimana jika Anda menghapus instalasi A
, yang lebih mungkin, karena A
apa yang Anda instal secara manual di tempat pertama? Dalam hal ini, B
tertinggal.
Jika Anda menggunakan fink, paket debfoster dirancang untuk membersihkan sistem Anda dan menghapus dependensi yang tidak digunakan.
Debfoster akan membantu Anda menyingkirkan paket (pustaka misalnya) tertinggal di sistem Anda ketika program yang membutuhkannya dihapus atau ditingkatkan ke versi yang tidak memiliki ketergantungan.
Meskipun debfoster
tidak akan berfungsi untuk MacPorts, tampaknya ada port debfoster
, misalnya portsfoster
, meskipun tampaknya dihentikan ...
Mungkin saat ini tidak ada solusi untuk MacPorts.
apt
sistem yang digunakan oleh Debian. Saya tidak menggunakan MacPorts, tetapi saya melakukan fink install debfoster
dan itu berfungsi dengan baik untuk saya.
apt
sistem dan tidak menggunakan deb
file. Ide MacPorts terkait dengan port FreeBSD atau NetBSD pkgsrc, tetapi implementasinya sangat berbeda.