gpt4 book ai didi

linux - 在 cpan 之前使用 yum/apt-get 来管理 UNIX 系统范围的 Perl 模块?

转载 作者:太空狗 更新时间:2023-10-29 12:01:11 25 4
gpt4 key购买 nike

Perl 的 cpan命令是管理 Perl 模块的强大方法。然而,在 UNIX 系统范围内维护模块时,Michal Ingeli注意到另一个可能的选择是 yum install 'perl(PerlModuleName)' .如果可用,yum 应该是我在这种情况下的首选吗?

例如命令cpanm CGI在我的 ~/perl5 目录下安装 CGI 模块,如果 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 命令生成的。

考虑到这一点,我应该转向 yum 吗? (如果可用)在 cpan 之前用于系统范围的 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>将模块加载到系统范围的目录。

最佳答案

我不能说我有 RPM/yum 系统的经验,但我在 Debian 系统上做了很多 Perl 应用程序的工作,我确实强烈推荐使用 CPAN 的系统打包版本如果可以的话,模块。我知道很多人不同意,从历史上看他们可能有充分的理由,但我已经做了很长时间,发现它非常有效。

在 Debian 世界中,有大量预打包的 Perl 模块,如果您碰巧需要一个未打包的模块,您可以使用 dh-make-perl 并将其放入本地 apt 存储库。当您的代码通过 Dev -> Staging/UAT -> Production 工作流时,能够运行 apt-get install your-application 并让它引入所有必需的依赖项是一个真正的节省时间。它还让您确信您部署到生产环境的特定模块的版本与您在 UAT 中测试的版本相同。

你绝对不应该做的一件事是使用 cpanm 或 cpan shell 作为 root 将模块安装到系统目录中。如果您决定直接从 CPAN 安装,请使用 local::lib将模块安装在特定于应用程序的 lib 目录中。

[编辑] 根据要求提供一些示例命令:

在基于 Debian 的系统上,您将首先安装 dh-make-perl 工具:

sudo apt-get-install dh-make-perl

然后要从 CPAN 下载一个包并将其构建到一个 .deb 文件中,您将运行如下命令*:

dh-make-perl --build --cpan Algorithm::CouponCode

您可以安装生成的 .deb 文件:

sudo dpkg -i libalgorithm-couponcode-perl_1.005-1_all.deb

管理您自己的 apt 存储库是另一个主题。在我的例子中,我会将 .deb 复制到本地 apt 服务器上的适当目录并运行脚本来更新索引(我认为我们的脚本使用 dpkg-scanpackages ).

请注意,在我上面的开头段落中,我建议使用系统包“如果可以”。需要明确的是,我指的是 Debain 已经打包了您想要的大部分模块的情况。上面的示例没有为任何依赖项构建包。如果您的应用程序涉及安装具有 Debian 中不存在的长依赖链的模块,那么使用 cpanm 和 local::lib 将简化安装。但是随着您的代码通过暂存到生产服务器前进,您将承担重复该操作的负担。你可能需要使用 cpanfilecarton以确保您在每一步都获得相同的版本。

* 一个陷阱:如果您之前设置了 local::lib 以便 cpan 安装进入私有(private)目录(例如:/home/user/perl5),那么这将影响 .deb 中使用的路径名dh-make-perl 制作。为避免这种情况,请在 dh-make-perl 之前运行:

unset PERL5LIB PERL_LOCAL_LIB_ROOT PERL_MB_OPT PERL_MM_OPT

关于linux - 在 cpan 之前使用 yum/apt-get 来管理 UNIX 系统范围的 Perl 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35923307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com