【发布时间】:2016-06-25 16:47:54
【问题描述】:
Perl 的cpan 命令是管理Perl 模块的强大方法。但是,在 UNIX 下维护系统范围的模块时,Michal Ingeli 指出另一个可能的选择是
yum install 'perl(PerlModuleName)'。如果可以的话,在这种情况下,yum 应该是我的第一选择吗?
例如,命令cpanm CGI 将CGI 模块安装在我的~/perl5 目录下,如果仅在我的帐户下运行的脚本需要CGI 模块,这可能是最好的。但这不会为其他帐户运行的脚本提供 CGI 模块。
我可以使用cpanm -l <directory> 强制cpanm 命令将模块加载到特定目录(例如,cpanm -l /usr/local CGI 将CGI 安装到/usr/local/lib/perl5),或者我可以编辑~/cpan/CPAN/MyConfig.pm更改cpan 使用的默认安装位置。
但在几乎所有系统上,都存在多个 Perl 系统库位置(/usr/local/share/perl5、/usr/share/perl5/vendor_perl、/usr/lib64/perl5 等),并选择正确的一个有点随意,因为这些不是由 cpan 命令生成的。
考虑到这一点,我是否应该在cpan 之前转向yum(如果可用)来进行系统范围的UNIX Perl 模块管理?使用如下命令进行测试很容易:
yum install 'perl(LWP::Simple)'
如果 yum 在这种情况下失败,我会退回到:
cpanm -l <directory> LWP::Simple
在这种情况下,您有什么建议,为什么?
(请注意,nxadm 已经回答了一个更普遍的问题。)
总结到目前为止的答案:
-
如果可能,请使用系统包管理器更新 CPAN 模块。例如,对于 LWP::Simple:
yum install 'perl(LWP::Simple)',或apt-get install liblwp-simple-perl
如果上述方法失败,请尝试实现一个单独的 Perl 环境,在该环境中使用系统范围的库中不存在的 CPAN 模块。为此考虑 local::lib 或 Perlbrew;
仅当上述选项不适用时,使用
cpanm -l <directory>将模块加载到系统范围的目录。
【问题讨论】:
-
是的。在包管理系统上,如果包管理器提供了您需要的软件,我建议在做任何其他事情之前先使用它。
-
您通常不应将软件包安装与 CPAN 安装混用。如果你想使用系统 perl,使用你的包管理器;否则,最好安装您自己的 perl 并使用 CPAN。
-
这同样适用于基于 Debian 的系统(如 Ubuntu)上的
dpkg,尽管包命名方案不同。一个问题是,并非所有 CPAN 模块都将在您的操作系统的软件包存储库中可用(这就是为什么您需要cpanm作为后备)。 -
别管您的供应商 Perl,而是使用 Perlbrew。