CPAN将模块安装到perl5而不是site_perl

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

我正在尝试将一些cpan模块临时安装到自定义文件夹(/ tmp / perl)中。所以我修改了构建安装基础...

o conf mbuildpl_arg "--install_base /tmp/perl"
o conf makepl_arg "INSTALL_BASE=/tmp/perl"

哪个工作正常,模块现在安装到该目录。我还设置了PERL5LIB

  PERL5LIB=/tmp/perl/lib/5.14.2/:/tmp/perl/lib/site_perl/:/opt/perl/lib/5.14.2/:/opt/perl/lib/site_perl/:

注意,这只是暂时的,在虚拟服务器上将被销毁。

我注意到,之前它会将模块安装到buildpath / lib / 5.14.2或buildpath / lib / site_perl中

但是现在,它将模块安装到buildpath / lib / perl5中

我的理解是核心perl模块最终在buildpath / lib / 5.14.2中,而非核心模块最终在buildpath / lib / site_perl中。

由于这是安装到buildpath / lib / perl5,什么决定安装到perl5目录而不是5.14.2或site_perl?

perl cpan
2个回答
8
投票

除非您通过环境变量(即PERL_MM_OPTPERL_MB_OPT中的值)或命令行参数(例如cpanmbuildpl_argmakepl_arg中的值)覆盖ExtUtils :: MakeMaker和Module :: Build,否则将使用在构建时硬编码到Perl中的位置。以下命令将显示这些位置(对于.pm和相关文件):

perl -V:'install(privlib|archlib|vendorlib|vendorarch|sitelib|sitearch)'
  • installprivlib包含Perl附带的“纯Perl”模块。
  • installarchlib与具有arch或build依赖组件的模块相同。
  • installvendorlib包含您的发行版安装的“纯Perl”模块。
  • installvendorarch与具有arch或build依赖组件的模块相同。
  • installsitelib包含您安装的“纯Perl”模块。
  • installsitearch与具有arch或build依赖组件的模块相同。

示例运行:

$ perl -V:'install(privlib|archlib|vendorlib|vendorarch|sitelib|sitearch)'
installprivlib='/usr/share/perl/5.14';
installarchlib='/usr/lib/perl/5.14';
installvendorlib='/usr/share/perl5';
installvendorarch='/usr/lib/perl5';
installsitelib='/usr/local/share/perl/5.14.2';
installsitearch='/usr/local/lib/perl/5.14.2';

$ perl -V:'install(privlib|archlib|vendorlib|vendorarch|sitelib|sitearch)'
installprivlib='/home/ikegami/usr/perlbrew/perls/5.20.1t/lib/5.20.1';
installarchlib='/home/ikegami/usr/perlbrew/perls/5.20.1t/lib/5.20.1/x86_64-linux-thread-multi';
installvendorlib='';
installvendorarch='';
installsitelib='/home/ikegami/usr/perlbrew/perls/5.20.1t/lib/site_perl/5.20.1';
installsitearch='/home/ikegami/usr/perlbrew/perls/5.20.1t/lib/site_perl/5.20.1/x86_64-linux-thread-multi';

>perl -V:"install(privlib|archlib|vendorlib|vendorarch|sitelib|sitearch)"
installprivlib='C:\progs\sp5280-x64\perl\lib';
installarchlib='C:\progs\sp5280-x64\perl\lib';
installvendorlib='C:\progs\sp5280-x64\perl\vendor\lib';
installvendorarch='C:\progs\sp5280-x64\perl\vendor\lib';
installsitelib='C:\progs\sp5280-x64\perl\site\lib';
installsitearch='C:\progs\sp5280-x64\perl\site\lib';

0
投票

这里没有答案。我也有同样的问题。 cpan和cpanm安装进入(使用X缩短路径):

/X/lib/perl5

但该路径不在@INC中:

perl -V

  @INC:
/X/lib/perl5/5.22.0/x86_64-linux-thread-multi
/X/lib/perl5/5.22.0
/X/lib/perl5/site_perl/5.22.0/x86_64-linux-thread-multi
/X/lib/perl5/site_perl/5.22.0
/X/lib/perl5/site_perl/5.22.0/x86_64-linux-thread-multi
/X/lib/perl5/site_perl/5.22.0
/X/lib/perl5/site_perl
/X/lib/perl5/site_perl/5.22.0/x86_64-linux-thread-multi
/X/lib/perl5/site_perl/5.22.0
/X/lib/perl5/5.22.0/x86_64-linux-thread-multi
/X/lib/perl5/5.22.0

PERL_MM_OPT和PERL_MB_OPT具有以下值,这些值似乎不正确:

PERL_MB_OPT="--install_base /X"
PERL_MM_OPT="INSTALL_BASE=/X"

我在conda环境中安装了Perl。我怀疑问题是CPAN和CPANM对PERL_MB_OPT和PERL_MM_OPT中包含的路径下的子目录结构做出了不正确的假设。

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