2015-05-21 22 views
1

我正在尝试将一些cpan模块临时安装到自定义文件夹(/ tmp/perl)中。所以我修改了构建安装基... ...CPAN将模块安装到perl5而不是site_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/: 

请注意,这是所有只是临时的,在虚拟服务器将被销毁。

我注意到,之前它会安装模块到构建路径/ lib目录/ 5.14.2或构建路径/ lib目录/ SITE_PERL

但是现在,其将模块安装到构建路径/ lib目录/ perl5的

我的理解是该核心Perl模块以buildpath/lib/5.14.2结尾,非核心模块以buildpath/lib/site_perl结尾。

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

+0

只需添加一条评论,我已经发现http://search.cpan.org/~bingos/ExtUtils-MakeMaker-7.04/lib/ExtUtils/MakeMaker.pm上的信息也很有用 – Ian

回答

4

除非你重写的ExtUtils :: MakeMaker的和Module ::通过环境变量构建(在PERL_MM_OPTPERL_MB_OPT即值)或命令行参数(例如值cpanmbuildpl_argmakepl_arg),位置硬编码到Perl的,当它是将被使用。下面的命令将显示(针对.pm及相关文件)的位置:

perl -V:'install(privlib|archlib|vendorlib|vendorarch|sitelib|sitearch)' 
  • installprivlib包含用Perl附带的“纯Perl的”模块。
  • installarchlib对于具有拱形或构建依赖组件的模块而言是相同的。
  • installvendorlib包含由您的发行版安装的“纯Perl”模块。
  • installvendorarch对于具有拱形或构建依赖组件的模块而言是相同的。
  • installsitelib包含由您安装的“纯Perl”模块。
  • installsitearch对于具有拱形或构建依赖组件的模块而言是相同的。

示例运行:

$ 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'; 
+0

再次感谢ikegami。 – Ian

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" 

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