Answers:
为了避免意外割掉可能是您要求的东西,您应该安装port_cutleaves
软件包,然后运行sudo port_cutleaves
https://guide.macports.org/#using.common-tasks.keeplean
MacPorts 1.9.0添加了,sqlite
portdbformat
而MacPorts 2.0.0删除了旧flat
格式。该sqlite
端口DB格式是新安装的默认; 升级到1.9.x的旧安装将继续使用flat
格式1。您可以通过升级到MacPorts 2.0或更改其中的值 ,然后以root身份发出port命令(例如)来将1.9.x flat
系统转换为sqlite
格式。portdbformat
/opt/local/etc/macports/macports.conf
sudo port installed
新格式的功能之一是,它可以跟踪“请求的”端口安装和“非请求的”端口安装。未请求的端口是仅由于其他端口依赖于此端口而安装的端口。该leaves
伪PORTNAME扩展到所有在没有其他安装port依赖未请求的端口。您可以使用它来“清理”不需要的端口,即使您最初并没有使用它们来进行卸载sudo port uninstall --follow-dependencies portname
(也可以执行您想要的操作,但前提是您每次每次卸载时都记得使用它)。
卸载任何现有叶子之前,应检查它们。
port echo leaves
一些常见的叶(automake
,gperf
,libtool
,pkgconfig
)是构建时常用的端口的依赖关系,所以你可能要“请求”他们(sudo port setrequested port1 port2 port3 …
),以避免卸载它们只是为了有后重新安装它们。
您可以很容易地卸载所有剩余的叶子:
sudo port uninstall leaves
注意:修剪叶子之前,您可能还想卸载不再“活动”的旧版本端口。这可能会显示更多的叶子(例如,端口是已安装端口的依赖项,但处于非活动状态):
sudo port uninstall inactive
《MacPorts指南》中有几节,还介绍了用于卸载不需要的端口的过程。leaves
while sudo port uninstall leaves; do :; done
的自动化操作。
sudo port uninstall --follow-dependents portname
不正确,因为--follow-dependents
它将“递归卸载依赖于指定端口的所有端口”。正确的选项是--follow-dependencies
,它将“以递归方式卸载指定端口所依赖的所有端口。这不会卸载标记为已请求或具有其他依赖关系的依赖关系。”
从文档:
卸载操作将卸载已安装的端口。
%% sudo port uninstall vile Note
要还递归卸载给定端口所依赖的端口,请使用该
‑‑follow‑dependencies
标志。这不会卸载标记为已请求或具有其他依赖项的依赖项。要在卸载端口本身之前递归卸载依赖于给定端口的所有端口,请使用
‑‑follow‑dependents flag
。如果端口是另一个已安装端口的依赖项,则除非先删除依赖端口,否则卸载将不会删除它。要覆盖此行为,请使用-f(强制)开关。这显然会破坏家属。除非您知道自己在做什么,否则不要强行卸载端口。
%% sudo port -f uninstall vile
请注意最后一段中的主要警告。依赖关系就是这种依赖关系,不同的应用程序可能(将)需要相同的依赖关系。
‑‑follow‑dependencies
与‑‑follow‑dependents
;引用的段落描述了两者,但只有第一个适用于该问题
删除端口及其依赖项的命令是:
sudo port uninstall foo --follow-dependents
但是,如果您要卸载的端口具有依赖关系,则没有-f
(force)标志将不会卸载该端口。
当然,您应该首先阅读《MacPorts指南》,特别是查看“ 卸载指南”部分。
我已经编写了一些脚本来自动进行端口清理:https : //github.com/vasi/macports-tools
“ macportsfoster”脚本将输出所有列表,而不是请求列表中的任何内容所必需的端口,顺序为“ port deactivate $(macportsfoster)”将一次删除所有端口。
我认为其他答案和--follow-dependents
标志都没有做您想要的。如果您安装了A
,并且A
需要B
,那么B
借助出色的软件包管理系统,将为您安装。您可以卸载B
,该--follow-dependents
标志将被识别并删除A
。但是,如果您卸载A
,该A
怎么办呢?这很可能是因为您首先手动安装了什么?在这种情况下,B
就落伍了。
如果使用fink,则debfoster软件包旨在清除系统并删除未使用的依赖项。
当需要删除软件包或将其升级为不具有依赖项的版本时,Debfoster将帮助您摆脱软件包(例如库),将它们留在系统上。
虽然debfoster
不适用于MacPorts,但似乎有的端口debfoster
,例如portsfoster
,尽管似乎已停产...
也许目前没有针对MacPorts的解决方案。
apt
系统无关,并且不使用deb
文件。MacPorts的概念与FreeBSD端口或NetBSD pkgsrc有关,但实现方式却大不相同。