卸载由CPAN安装

问题描述:

昨天所有Perl模块我想测试一些软件和文档它说,安装我只需要键入卸载由CPAN安装

cpan -i Software 

我从来没有使用过CPAN,我只知道,它是perl软件包管理器。 (它是..?)然而,事实证明,我需要大量的依赖关系,并且像我一样愚蠢,我只是安装了所有它们。 (首先,我必须设置cpan,它问了我很多问题)长话短说,我只是想再次删除它。我google了一下,似乎cpan没有卸载例程,特别是对于所有的包一次。 我可以删除一些目录吗?还是会遇到麻烦?

cpan命令是不是真的像apt-get是一个包管理器是。它更多的是从CPAN(网站或其镜像之一)下载和安装的工具。完成此任务后,它不记得之前做了什么,至少不足以删除以前安装的模块,至少不能可靠,干净地或依赖性地安全。 (更新:在看过App::pmuninstall之后,它可以用来处理依赖关系,但是它通过连接到外部(read:web)源(它们分别计算这些源)来做到这一点,这很好,但我支持之前的说法CPAN.pm不这样做)

我曾经担心删除模块,但现在我意识到大多数Perl模块占用的空间很小,我只是不担心安装了一些额外的模块,你永远不会使用。所以除非你在一台配有真正小碟的电脑上,否则我会放过它。

在Windows上或者如果您在Linux/Mac上使用非系统Perl,您可以删除Perl并重新安装它。如果您在Linux/Mac上使用安装了Perl的系统,我不会推荐这种方法,但是您可能会因此破坏操作系统(如果您小心,可能会好起来,但不值得保存几MB!)。

将来,您可以使用perlbrew轻松安装本地版本的Perl,如果文档不够(应该是),那么网上有教程。这也可以让你玩最新最好的Perl版本,而你的系统可能还没有出现。然后,如果你安装了一堆垃圾,甚至破坏它做一些疯狂的事情,请删除该版本并重新安装/安装不同的版本。

另一个不错的工具是cpanminus(或简称cpanm),它是一个更新,更友好的cpan工具。所有酷酷的孩子都在使用它。

+1

谢谢你的好解释。我深入了解lib目录并决定保留所有这些文件,正如你所建议的那样。 – janoliver

+0

'pm-uninstall'可以删除模块。 – xenoterracide

+0

@xenoterracide是否依赖于使用cpanm进行安装?粗略浏览文档似乎表明这一点。无论如何,我不认为有必要卸载CPAN上的几乎任何模块,至少从数据存储的角度来看。仍然很高兴知道有什么东西存在 –

我认为最好的选择是卸载Perl并重新安装。

+7

此建议的唯一问题是,您不应该这样做是因为您正在Linux/Mac上使用系统范围的安装。如果你在Windows上,那么这实际上可能是首选。 –

我不知道要删除“所有”。但是要删除单个模块,您可以使用App::pmuninstall和它的唯一脚本pm-uninstall来卸载模块。然后,您可以编写某种脚本来递归删除代码。

可以卸载各个模块与CPANPLUS(船舶用Perl)这样的:

cpanp uninstall SQL::Abstract 

您可以查看与CPAN这样的脚本安装的所有模块:

perldoc perllocal 

把两者结合在一起:

for module in $(perldoc -u perllocal | grep -F 'C<Module> L<' | sed 's/^.*L<\(.*\)|.*>$/\1/') ; do 
    cpanp uninstall "$module" 
done 
+1

我想脚本的第2行应该是'cpanm --uninstall“$ module”' –

如果您不能再使用cpan,因为您的系统中有不兼容的模块路径,您可以手动删除所有安装的模块。例如,我从Fedora 22升级到Fedora 23,Perl版本改变了。之前通过cpanm安装到/usr/local/lib64/perl5的所有模块都不再工作,并阻止我使用cpanm。

$ cpanm --uninstall Apache::DBI 
Attempt to reload Scalar/Util.pm aborted. 
Compilation failed in require at /usr/share/perl5/vendor_perl/File/Temp.pm line 18. 
... 

我可以通过移动目录解决这个问题:

$ mv /usr/local/lib64/perl5 /root/usr-local-lib64-perl5 

该目录的名称可能会在系统上会有所不同。

小心:如果一个模块安装在该目录之外的文件,例如系统库文件,这些文件将保留在那里。