【问题标题】:Package all Perl module dependencies?打包所有 Perl 模块依赖项?
【发布时间】:2014-02-06 13:18:53
【问题描述】:

我发现自己在 CentOS 上没有 root 访问权限,并且使用了一个非常蹩脚的 Perl,甚至没有 ExtUtils::MakeMaker。

是否存在可以生成模块依赖项存档的东西,以便我将其解包到可以放入 @INC 的目录中?

【问题讨论】:

  • 我会考虑在不需要 root 访问权限的地方使用 perlbrew 构建自己的 perl。
  • 这是我最后的选择,我正在使用 Perl Virtue of Laziness....
  • 我通常发现 perlbrew 对于我的懒惰比尝试应对模块的环​​境支持更令人满意:)

标签: perl installation


【解决方案1】:

使用App::cpanminus

cd ~/bin
curl -LO http://xrl.us/cpanm
chmod +x cpanm

export ROOT=/some/directory
export PERL5LIB=${ROOT}/lib/perl5

然后,安装ExtUtils::MakeMakerModule::CoreList。您无法进行简单的安装,因为这些模块由 cpanm 使用,并且它不会在解压缩的源目录中查找它们。所以,让cpanm 下载它们,然后进行半手动安装。它实际上安装了三个发行版(上面的两个和ExtUtils::Install),这就是为什么你要调用构建咒语三次:

PERL_MM_OPT=INSTALLBASE=$ROOT ./cpanm -L $ROOT --look ExtUtils::MakeMaker Module::CoreList
perl Makefile.PL
make && make install
exit
perl Makefile.PL
make && make install
exit
perl Makefile.PL
make && make install
exit

它依次解压和cds 到每个发行版的目录中。至少那是在我碰巧闲置的 CentOS 6 安装上发生的情况。

之后,您应该能够通过

安装您的模块及其依赖项
./cpanm -L $ROOT <module name, or url, or tarball goes here>

查看cpanm 文档了解更多信息。

【讨论】:

    【解决方案2】:

    您可以使用 perlbrew 安装具有用户访问权限的全新 Perl。

    http://perlbrew.pl/

    #install perlbrew
    wget -O - http://install.perlbrew.pl | bash
    
    # install new perl for youurself
    perlbrew install perl-5.16.0
    # set aliases
    perlbrew switch perl-5.16.0
    
    #reinstall all moodules for new perl http://perlbrew.pl/Reinstall-All-Modules-On-New-Perl.html
    perlbrew list-modules | perlbrew exec --with perl-5.16.0 cpanm
    
    #how to install/recompile third party modules
    https://github.com/lecstor/DevNotes/wiki/Image-Magick-with-Perlbrew
    

    问候,

    【讨论】:

    • 这不能回答问题。它试图以完全不同的方式解决相同的问题,OP 在发布答案前半小时评论说这是不可接受的。
    【解决方案3】:

    下载并解压ExtUtils::MakeMaker,在你的主目录下创建一个目录lib,安装方式:

    perl Makefile.PL PREFIX=~/lib LIB=~/lib
    

    现在模块已经安装,我建议你使用local::lib(通过文档中的bootstrap方法轻松安装)来安装模块:

    perl -MCPAN -Mlocal::lib -e 'CPAN::install(MIME::Lite)' # Replace MIME::Lite with what you want to install.
    

    这里 MIME::Lite 通过 cpan 安装到您的本地 lib 目录。 Prelbrew 设置起来不会花很长时间,从长远来看,您可能会更轻松。

    编辑,评论太长了。

    @LeeGee 也许我不够具体。

    所描述的方法将允许您绕过您可以访问的受限版本的 perl,并允许将模块安装到另一个位置。

    如果您想在另一台机器上打包您的应用程序,您可以使用PARpp 创建一个独立的代码和模块包,或一个独立的可执行文件。

    Module::ScanDeps 找不到脚本依赖项

    【讨论】:

    • 很高兴知道为什么这被否决了。这不是一个确切的答案,但我相信常见问题解答鼓励对反对票做出解释。
    • @LeeGee 我已经更新了我的答案,更新对于 cmets 来说太长了。期望人们解释反对票是没有意义的,即使它是按照内部规则玩的。
    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 2020-10-23
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 2013-09-15
    • 2010-11-15
    • 1970-01-01
    相关资源
    最近更新 更多