Làm cách nào để loại bỏ các gói MacPorts không sử dụng?


94

Bất cứ khi nào tôi cài đặt một chương trình thông qua MacPorts, nó sẽ nhận và cài đặt rất nhiều phụ thuộc. Khi tôi gỡ cài đặt chương trình đã nói, làm cách nào để tạo MacPorts loại bỏ đệ quy tất cả các phụ thuộc không sử dụng với nó?

Câu trả lời:


105

Để tránh việc vô tình cắt lá có thể là những thứ bạn yêu cầu, bạn nên cài đặt port_cutleavesgói sau đó chạy sudo port_cutleaves https://guide.macports.org/#USE.common-t task.keeplean


MacPorts 1.9.0 đã thêmsqlite portdbformatMacPorts 2.0.0 bỏ flatđịnh dạng cũ . Các sqliteđịnh dạng cổng DB là mặc định cho việc cài đặt mới; cài đặt cũ được nâng cấp lên 1.9.x sẽ tiếp tục sử dụng flatđịnh dạng 1 . Bạn có thể chuyển đổi flathệ thống 1.9.x sang sqliteđịnh dạng bằng cách nâng cấp lên MacPorts 2.0 hoặc bằng cách thay đổi portdbformatgiá trị trong /opt/local/etc/macports/macports.confvà sau đó ban hành lệnh cổng dưới dạng root (ví dụ sudo port installed).

Một trong những tính năng của định dạng mới là nó theo dõi các cài đặt cổng được yêu cầu của Wap so với không được yêu cầu. Một cổng không được yêu cầu là một cổng chỉ được cài đặt vì một số cổng khác phụ thuộc vào nó. Tên leavesgiả danh mở rộng đến tất cả các cổng chưa được yêu cầu mà không có cổng cài đặt nào khác phụ thuộc. Bạn có thể sử dụng điều này để dọn dẹp các cổng không cần thiết, ngay cả khi ban đầu bạn không gỡ cài đặt chúng sudo port uninstall --follow-dependencies portname(điều này sẽ làm những gì bạn muốn, nhưng chỉ khi bạn nhớ sử dụng nó mỗi khi bạn gỡ cài đặt thứ gì đó).


Bạn nên kiểm tra các lá hiện có của bạn trước khi gỡ cài đặt bất kỳ trong số chúng.

port echo leaves

Một số lá thông thường ( automake, gperf, libtool, pkgconfig) là xây dựng thời gian phụ thuộc của các cổng thông thường, vì vậy bạn có thể muốn “yêu cầu” họ ( sudo port setrequested port1 port2 port3 …) để tránh gỡ bỏ cài đặt chúng chỉ phải cài đặt lại chúng sau này.

Bạn có thể gỡ cài đặt bất kỳ lá còn lại khá dễ dàng:

sudo port uninstall leaves

Lưu ý: Trước khi cắt tỉa lá của bạn, bạn cũng có thể muốn gỡ cài đặt các phiên bản cổng cũ không còn hoạt động. Điều này có thể tiết lộ thêm một vài lá (tức là các cổng là phụ thuộc của các cổng được cài đặt, nhưng không hoạt động):

sudo port uninstall inactive

một số phần trong Hướng dẫn MacPorts cũng mô tả quá trình sử dụng leavesđể gỡ cài đặt các cổng không cần thiết.


11
Cảm ơn. Điều này khá hữu ích. Có vẻ như bạn có thể phải chạy lá echo và gỡ cài đặt lá trở lại nhiều lần để đảm bảo rằng tất cả các lá được làm sạch. Tôi đã chạy cả hai lệnh ít nhất 4 lần trước khi tiếng vang trả về kết quả trống
Antony

6
Bạn có thể nói một cái gì đó như while sudo port uninstall leaves; do :; doneđể tự động hóa điều đó.
Tom Anderson

2
@ChrisJohnsen sudo port uninstall --follow-dependents portnamekhông chính xác, vì --follow-dependentssẽ "gỡ cài đặt đệ quy tất cả các cổng phụ thuộc vào cổng được chỉ định". Tùy chọn chính xác ở đây là --follow-dependencies, sẽ "gỡ cài đặt đệ quy tất cả các cổng mà cổng được chỉ định phụ thuộc vào. Điều này sẽ không gỡ cài đặt các phụ thuộc được đánh dấu là yêu cầu hoặc có các phụ thuộc khác."
TachyonVortex

8

Từ các tài liệu :

Hành động gỡ cài đặt sẽ gỡ cài đặt một cổng đã cài đặt.

%% sudo port uninstall vile Note

Để cũng gỡ cài đặt đệ quy các cổng mà cổng đã cho phụ thuộc vào, hãy sử dụng ‑‑follow‑dependenciescờ. Điều này sẽ không gỡ cài đặt các phụ thuộc được đánh dấu là yêu cầu hoặc có các phụ thuộc khác.

Để gỡ cài đặt đệ quy tất cả các cổng phụ thuộc vào cổng đã cho trước khi gỡ cài đặt chính cổng đó, hãy sử dụng ‑‑follow‑dependents flag.

Nếu một cổng là một phụ thuộc của một cổng được cài đặt khác, việc gỡ cài đặt sẽ không xóa nó trừ khi bạn loại bỏ (các) cổng phụ thuộc trước. Để ghi đè hành vi này, sử dụng công tắc -f (lực). Điều này rõ ràng sẽ phá vỡ những người phụ thuộc. Đừng buộc gỡ cài đặt cổng trừ khi bạn biết bạn đang làm gì.

%% sudo port -f uninstall vile

Lưu ý cảnh báo chính trong đoạn cuối. Các phụ thuộc chính xác là các phụ thuộc của Haiti, các ứng dụng khác nhau có thể (sẽ) yêu cầu các phụ thuộc giống nhau.


Tôi không nghĩ rằng điều này trả lời câu hỏi. OP muốn xóa một chương trình và những thứ mà nó yêu cầu, không xóa chương trình và những thứ yêu cầu.

2
@mankoff: ‑‑follow‑dependenciesso với ‑‑follow‑dependents; đoạn trích dẫn mô tả cả hai, nhưng chỉ đoạn đầu tiên áp dụng cho câu hỏi
Chris Johnsen

3
Cá nhân, tôi nghĩ rằng ti thật tuyệt khi Philip giải thích cả hai tham số, vì vậy chúng tôi nhận thức đầy đủ về các tham số và ý nghĩa của chúng khi ban hành lệnh như vậy
Antony

3

Lệnh xóa một cổng và các phụ thuộc của nó là:

sudo port uninstall foo --follow-dependents

Tuy nhiên, nếu cổng bạn đang gỡ cài đặt có người phụ thuộc thì cổng sẽ không gỡ cài đặt mà không có -fcờ (bắt buộc).

Tất nhiên, bạn nên bắt đầu bằng cách đọc qua Hướng dẫn MacPorts đặc biệt xem phần hướng dẫn Gỡ cài đặt.


3

Ngoài ra còn có một tập lệnh trong thư mục contrib của MacPorts có tên là port_cutleaves mà bạn có thể chạy để loại bỏ các phụ thuộc không cần thiết: http://trac.macports.org/browser/contrib/ . Nó sẽ yêu cầu bạn cho mỗi cổng được gỡ cài đặt và cho phép giữ một số, nếu bạn muốn.


2

Tôi đã viết một số tập lệnh để tự động dọn dẹp cổng: https://github.com/vasi/macports-tools

Tập lệnh 'macportsfoster' sẽ đưa ra danh sách tất cả các cổng không được yêu cầu bởi bất kỳ thứ gì trong danh sách được yêu cầu, được yêu cầu sao cho 'cổng hủy kích hoạt $ (macportsfoster)' sẽ xóa tất cả các cổng đó trong một lần.


1

Tôi nghĩ rằng các câu trả lời khác, và --follow-dependentscờ, không làm những gì bạn muốn. Nếu bạn cài đặt AAyêu cầu B, thì nhờ các hệ thống quản lý gói tuyệt vời, Bsẽ được cài đặt cho bạn. Bạn có thể gỡ cài đặt B--follow-dependentscờ sẽ được biết và xóa A. Nhưng điều gì sẽ xảy ra nếu bạn gỡ cài đặt A, nhiều khả năng, bởi vì đó Alà những gì bạn đã cài đặt thủ công ở nơi đầu tiên? Trong trường hợp này, Bbị bỏ lại phía sau.

Nếu bạn sử dụng fink, gói debfoster được thiết kế để dọn sạch hệ thống của bạn và loại bỏ các phụ thuộc không sử dụng.

Debfoster sẽ giúp bạn thoát khỏi các gói (ví dụ thư viện) bị bỏ lại trên hệ thống của bạn khi chương trình yêu cầu nó bị xóa hoặc nâng cấp lên phiên bản không có phụ thuộc.

Mặc dù debfostersẽ không hoạt động đối với MacPorts, debfosterví dụ, portsfosterdường như có các cổng của , mặc dù nó dường như bị ngừng ...

Có lẽ hiện tại không có giải pháp nào tồn tại cho MacPorts.


Nhưng không phải là debfoster cho các tệp deb trên hệ thống dựa trên Debian? Làm cách nào để sử dụng nó cho các cổng MacPorts trên Mac OS X?
hpy

Nó đã được chuyển sang OS X và MacPorts và fink dựa trên apthệ thống được Debian sử dụng. Tôi không sử dụng MacPorts, nhưng tôi đã làm fink install debfostervà nó hoạt động tốt với tôi.

MacPorts không liên quan đến apthệ thống và không sử dụng debtệp. Ý tưởng về MacPorts có liên quan đến các cổng FreeBSD hoặc NetkgD pkgsrc, nhưng cách thực hiện rất khác nhau.
Chris Johnsen

1
ĐỒNG Ý. Cảm ơn vì sự đúng đắn của bạn. Bất kể, debfoster đã được chuyển để hoạt động tốt thông qua fink. Tìm kiếm thêm cho thấy rằng nó không hoạt động với MacPorts, nhưng có bản sao, ví dụ, xemportsfoster
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.