将Perl模块安装到特定位置

问题描述 投票:3回答:3

我有几台运行Perl程序以及其他程序和工具的Linux机器。

我想使所有机器之间的所有工具保持同步,所以我已经在一台机器(主)和另一台机器之间共享了/usr/local目录。

现在,我想在/usr/local/<path to modules>中使所有Perl模块及其依赖项保持同步。

我已经找到了local::lib模块,但这是为了将模块安装到您的主目录。

如何设置CPAN(或CPAN替代产品)以将所有模块和依赖项安装到一个位置?以及如何在其他计算机上设置Perl以使用该位置查找模块?

linux perl perl-module cpan
3个回答
3
投票

为了方便起见,我们将基本位置分配给变量:(此var除了以下命令外不被使用。实际上不需要local::lib。]

export

指示ExtUtils :: MakeMaker的安装位置:(这假设export PERL_BASE="/usr/local/perl" # Or "$HOME" or whatever 不包含任何外壳程序元字符)

$PERL_BASE

Instruct Module :: Build的安装位置:(假定export PERL_MM_OPT="INSTALL_BASE=$PERL_BASE" 不包含任何外壳程序元字符)

$PERL_BASE

指示Perl在哪里寻找模块:(假设export PERL_MB_OPT="--install_base $PERL_BASE" 不包括$PERL_BASE

:

指示系统在哪里寻找脚本:(假设export PERL5LIB="$PERL_BASE/lib/perl5" 不包括$PERL_BASE

:

指示系统在哪里查找手册页:(假设export PATH="$PERL_BASE/bin${PATH:+:$PATH}" 不包括$PERL_BASE

:

全部:

export MANPATH="$PERL_BASE/man${MANPATH:+:$MANPATH}"

0
投票

基于我以前对export PERL_BASE="/usr/local/perl" export PERL_MM_OPT="INSTALL_BASE=$PERL_BASE" export PERL_MB_OPT="--install_base $PERL_BASE" export PERL5LIB="$PERL_BASE/lib/perl5" export PATH="$PERL_BASE/bin${PATH:+:$PATH}" export MANPATH="$PERL_BASE/man${MANPATH:+:$MANPATH}" 的误解,应该可以通过在local::lib中设置INSTALL_BASE来设置模块的安装位置,最有可能通过运行类似于以下命令:

PERL_MM_OPT

或者,如果您手动执行Makefile / make / make测试/ make安装过程而不是使用CPAN工具链,则可以将export PERL_MM_OPT='INSTALL_BASE=/usr/local/<path to modules>' 作为参数传递给--install_base=/usr/local/<path to modules>


0
投票

Makefile.PL可以在任何位置设置,位置local::lib只是默认位置:

~/perl5

# set up PERL_MM_OPT, PERL_MB_OPT, PERL5LIB, and other shell variables eval "$(perl -I/opt/perllib/lib/perl5 -Mlocal::lib=/opt/perllib)" CPAN安装程序可以将其安装到任何位置,就好像它是本地:: lib,而不管您的环境如何配置(无论是通过本地:: lib还是其他方式):

cpanm

您可以通过使用cpanm -l /opt/perllib Some::Module PERL5LIBlib开关添加lib目录,并使用local :: lib bin中的可执行文件路径来使用任何local :: lib安装,而无需启用它目录(如果需要):

-I
© www.soinside.com 2019 - 2024. All rights reserved.