CPAN 将模块安装到 perl5 而不是 site_perl
CPAN installing modules into perl5 instead of site_perl
我正在尝试将一些 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_MM_OPT
和 PERL_MB_OPT
中的值)或命令行参数(例如 [=16= 中的值)覆盖 ExtUtils::MakeMaker 和 Module::Build ] 的 mbuildpl_arg
和 makepl_arg
),将使用在构建 Perl 时硬编码到 Perl 中的位置。以下命令将向您显示这些位置(对于 .pm
和相关文件):
perl -V:'install(privlib|archlib|vendorlib|vendorarch|sitelib|sitearch)'
installprivlib
包含 Perl 附带的 "pure Perl" 模块。
installarchlib
对于具有 arch- 或 build-dependent 组件的模块是相同的。
installvendorlib
包含您的发行版安装的 "pure Perl" 模块。
installvendorarch
对于具有 arch- 或 build-dependent 组件的模块是相同的。
installsitelib
包含您安装的 "pure Perl" 个模块。
installsitearch
对于具有 arch- 或 build-dependent 组件的模块是相同的。
示例运行:
$ 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';
这里没有发布答案。我也有同样的问题。 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.
中包含的路径下的子目录结构做出了不正确的假设
我正在尝试将一些 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_MM_OPT
和 PERL_MB_OPT
中的值)或命令行参数(例如 [=16= 中的值)覆盖 ExtUtils::MakeMaker 和 Module::Build ] 的 mbuildpl_arg
和 makepl_arg
),将使用在构建 Perl 时硬编码到 Perl 中的位置。以下命令将向您显示这些位置(对于 .pm
和相关文件):
perl -V:'install(privlib|archlib|vendorlib|vendorarch|sitelib|sitearch)'
installprivlib
包含 Perl 附带的 "pure Perl" 模块。installarchlib
对于具有 arch- 或 build-dependent 组件的模块是相同的。installvendorlib
包含您的发行版安装的 "pure Perl" 模块。installvendorarch
对于具有 arch- 或 build-dependent 组件的模块是相同的。installsitelib
包含您安装的 "pure Perl" 个模块。installsitearch
对于具有 arch- 或 build-dependent 组件的模块是相同的。
示例运行:
$ 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';
这里没有发布答案。我也有同样的问题。 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.
中包含的路径下的子目录结构做出了不正确的假设