WSL Ubuntu 为什么 cpanm 会在错误的位置安装 Perl5 模块?

WSL Ubuntu 为什么 cpanm 会在错误的位置安装 Perl5 模块?

我在 Windows Subsystem for Linux 2 (WSL2) 下安装了 Ubuntu。/usr/share/perl/5.30.0 下安装了 Perl5 模块,我可以使用简单的语句访问这些​​模块use。但是当我使用 cpanminus 安装新模块时,它会将它们放在 /home/*****/perl5/lib/perl5/ 中,除非我在顶部有声明,否则解释器无法找到它们use lib。有没有办法让 cpanm 将它们安装在正确的位置?

这是 perl -V 的相关输出。我不知道在使用 cpanm 之前 %ENV 中的条目是否存在。否则安装就是发行版附带的。

%ENV:                                                                                                                                 
PERL5LIB="/home/*****/perl5/lib/perl5"                                                                                  
PERL_LOCAL_LIB_ROOT="/home/*****/perl5"                                                                             
PERL_MB_OPT="--install_base "/home/*****/perl5""                                                                    
PERL_MM_OPT="INSTALL_BASE=/home/*****/perl5"                                                                      
@INC:                                                                                                                 
/home/*****/perl5/lib/perl5/5.30.0/x86_64-linux-gnu-thread-multi                                                    
/home/*****/perl5/lib/perl5/5.30.0                                                                                  
/home/*****/perl5/lib/perl5/x86_64-linux-gnu-thread-multi                                                           
/home/*****/perl5/lib/perl5                                                                                         
/etc/perl                                                                                                           
/usr/local/lib/x86_64-linux-gnu/perl/5.30.0                                                                         
/usr/local/share/perl/5.30.0                                                                                        
/usr/lib/x86_64-linux-gnu/perl5/5.30                                                                                
/usr/share/perl5                                                                                                    
/usr/lib/x86_64-linux-gnu/perl/5.30                                                                                 
/usr/share/perl/5.30                                                                                                
/usr/local/lib/site_perl                                                                                            
/usr/lib/x86_64-linux-gnu/perl-base     

答案1

为了避免use lib在脚本中出现这种情况,您可以修改文件中的 perl 搜索路径~/.bashrc,就像我做的那样:

PERL5LIB="/home/*****/perl5/lib/perl5${PERL5LIB:+:${PERL5LIB}}"; export PERL5LIB;

答案2

在您的环境中,您有一些设置本地::lib。各种 CPAN 工具都使用此模块来设置安装位置,以便您可以以非特权用户身份安装模块。

PERL5LIB="/home/*****/perl5/lib/perl5"                                                                                  
PERL_LOCAL_LIB_ROOT="/home/*****/perl5"                                                                             
PERL_MB_OPT="--install_base "/home/*****/perl5""                                                                    
PERL_MM_OPT="INSTALL_BASE=/home/*****/perl5"                                                                      

这些设置可能位于您的 shell 配置文件中。

在您的程序内部,您可以使用该模块使用这些设置来调整模块搜索路径:

use local::lib;

您也可以从命令行加载:

% perl -Mlocal::lib program.pl

但是,您似乎不想使用local::lib(并且应该清除这些环境变量)。使用 cpanm,您可以使用以下命令指定安装基础-l

% cpanm -l /usr/share/perl/5.30.0 ...

您可以删除环境变量PERL_MB_OPTPERL_MM_OPT,它们告诉构建.PL或者Makefile文件安装位置。如果不存在这些,各种 CPAN 工具将从perl他们使用,这似乎就是你想要的。

相关内容