我有几台运行Perl程序以及其他程序和工具的Linux机器。
我想使所有机器之间的所有工具保持同步,所以我已经在一台机器(主)和另一台机器之间共享了/usr/local
目录。
现在,我想在/usr/local/<path to modules>
中使所有Perl模块及其依赖项保持同步。
我已经找到了local::lib
模块,但这是为了将模块安装到您的主目录。
如何设置CPAN(或CPAN替代产品)以将所有模块和依赖项安装到一个位置?以及如何在其他计算机上设置Perl以使用该位置查找模块?
为了方便起见,我们将基本位置分配给变量:(此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}"
基于我以前对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>
。
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
或PERL5LIB
或lib开关添加lib目录,并使用local :: lib bin中的可执行文件路径来使用任何local :: lib安装,而无需启用它目录(如果需要):
-I