我正在一台没有互联网连接的机器上设置本地 perl 安装(目前,我只是在虚拟机上进行 PoC)。我已经从 RPM 存储库安装了本地 perl、CPAN
和 MakeMaker
,现在我正在尝试构建 local::lib
,使用这个命令:
perl -I /home/serveradmin/local/usr/share/perl5 Makefile.PL --bootstrap=~/local/usr --no-manpages
-I
路径是CPAN
和MakeMaker
的位置。
> find /home/serveradmin/local -name CPAN.pm
/home/serveradmin/local/usr/share/perl5/CPAN.pm
> find /home/serveradmin/local -name MakeMaker.pm
/home/serveradmin/local/usr/share/perl5/ExtUtils/MakeMaker.pm
但是,它因以下错误而失败:
Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains:
/home/serveradmin/local/usr/lib/perl5/5.10.0 /home/serveradmin/local/usr/lib/perl5
/usr/local/lib/perl5 /usr/local/share/perl5 /usr/lib/perl5/vendor_perl
/usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5 .) at inc/ConfigCPAN.pm line 15.
Can't locate CPAN.pm in @INC (@INC contains:
/home/serveradmin/local/usr/lib/perl5/5.10.0 /home/serveradmin/local/usr/lib/perl5
/usr/local/lib/perl5 /usr/local/share/perl5 /usr/lib/perl5/vendor_perl
/usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5 .).
perl -V
和 env -i perl -V
都产生相同的 @INC
(PERLLIB
也没有设置 PERL5LIB
;实际上,env | grep -i perl
没有显示任何结果):
/usr/local/lib/perl5
/usr/local/share/perl5
/usr/lib/perl5/vendor_perl
/usr/share/perl5/vendor_perl
/usr/lib/perl5
/usr/share/perl5
.
我在 -I
上指定的路径没有出现在错误显示的 @INC
上,这让它看起来像 -I
不工作。但是如果我跑
perl -I /home/serveradmin/local/usr/share/perl5 -V
这正确地将路径添加到 @INC
之前。
我的 google-fu 没有阐明这一点,因此不胜感激任何帮助/指点。
感谢您的宝贵时间。
请您参考如下方法:
Makefile.PL
可能正在启动另一个 perl
实例,但没有重新指定 -I
选项(因为它不知道它需要到)。使用 env var PERL5LIB
应该可以解决这个问题,因为它从父进程传递到子进程。
也就是说,我建议您改为修复损坏的 Perl 安装。 perlbrew
使安装 Perl 变得容易,但不安装 Perl 也很简单。如果您选择不使用 perlbrew
,请阅读 INSTALL
了解您必须输入的命令,并了解如何指定安装位置。如果您需要线程支持,请不要忘记将 -Dusethreads
传递给 Configure
。