昨天我想测试一些软件,并在文档中说,要安装我只需要输入
cpan -i Software
我从未使用过cpan,我只知道它是perl包管理器。 (是吗??)然而,事实证明我需要大量的依赖项,而且像我一样愚蠢,我只是安装了所有这些依赖项。 (首先,我不得不设置cpan,问我很多问题)长话短说,我只想再删除所有这些。我google了一下,似乎cpan没有卸载例程,特别是对于所有的包一次。 我可以删除一些目录,还是会遇到麻烦?
答案 0 :(得分:28)
cpan
命令实际上不是apt-get
之类的包管理器。它更像是一种从CPAN(网站或其中一个镜像)下载和安装的工具。完成此任务后,它不记得以前做过什么,至少不足以删除以前安装的模块,至少不可靠,干净或依赖安全。 (更新:在查看App::pmuninstall
之后,它可以用来处理依赖关系,但它是通过连接到外部(读取:web)源来实现的,这些源分别计算这些,这很好,但我支持前面的说法,即CPAN.pm不会这样做。)
我曾经担心删除模块,但现在我意识到大多数Perl模块占用的空间很小,我只是不用担心安装一些你永远不会使用的额外模块。因此,除非您使用的是真正小碟片的计算机,否则我会放弃它。
在Windows上或者如果您在Linux / Mac上使用非系统Perl,您只需删除Perl并重新安装即可。如果您在Linux / Mac上使用系统安装Perl,我不建议这样做,因为您可能会破坏您的操作系统(如果您小心,可能没问题,但不值得保存一些Mb!)。
将来,您可以使用perlbrew轻松安装本地版本的Perl,如果文档不够(应该是),那么整个网络都有教程。这也有让你玩最新和最好的Perl版本的好处,你的系统可能还没有。然后,如果您安装了一大堆垃圾,或者甚至打破它做一些疯狂的事情,请删除该版本并重新安装/安装其他版本。
另一个不错的工具是cpanminus(或简称cpanm),它是一种更新,更友好的cpan工具。所有很酷的孩子都在使用它。
答案 1 :(得分:15)
您可以使用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
答案 2 :(得分:2)
我不确定要删除“全部”。但是要删除单个模块,您可以使用App::pmuninstall
使用它的唯一脚本pm-uninstall
来卸载模块。然后,您可以编写某种脚本来递归删除deps。
答案 3 :(得分:1)
如果由于路径中存在不兼容的模块而无法再使用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
该目录的名称可能因系统而异。
Carefull:如果模块安装了该目录之外的文件,例如系统库文件,这些文件将保留在那里。
答案 4 :(得分:0)
我认为最好的选择是卸载Perl并重新安装。
答案 5 :(得分:0)
我将更改Flimm的答案以使用cpanm,并有选择地在脚本末尾卸载cpanm本身:
#!/usr/bin/env bash
for module in $(perldoc -u perllocal | grep -F 'C<Module> L<' | sed 's/^.*L<\(.*\)|.*>$/\1/' | sort | uniq) ; do
if [[ "$module" =~ "App::cpanminus" ]]; then
continue
fi
echo "Uninstalling $module..."
yes | cpanm --uninstall "$module"
done
cpanm --uninstall App::cpanminus