我在 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_OPT
和PERL_MM_OPT
,它们告诉构建.PL或者Makefile文件安装位置。如果不存在这些,各种 CPAN 工具将从perl他们使用,这似乎就是你想要的。