Perl 当存在local::lib时,如何在站点范围内安装CPAN模块?

Perl 当存在local::lib时,如何在站点范围内安装CPAN模块?,perl,cpan,locallib,padre,Perl,Cpan,Locallib,Padre,我最近安装了一个新系统,想安装Padre来检查它。Padre安装说明特别指出要安装local::lib,所以我这样做了(尽管我以前从未需要过它)。然后,我继续安装其他几个模块,使用sudo从我的普通用户帐户运行CPAN,以处理安装所需的根目录部分 然后是时候测试这些模块需要支持的一个web应用了,瞧,apache找不到它们。他们从命令行很好地加载,快速查看~/perl5确认了我的怀疑,本地::lib劫持了我的CPAN会话,并将这些模块安装在那里而不是整个站点的位置,尽管我的CPAN配置包括 ma

我最近安装了一个新系统,想安装Padre来检查它。Padre安装说明特别指出要安装local::lib,所以我这样做了(尽管我以前从未需要过它)。然后,我继续安装其他几个模块,使用
sudo
从我的普通用户帐户运行CPAN,以处理安装所需的根目录部分

然后是时候测试这些模块需要支持的一个web应用了,瞧,apache找不到它们。他们从命令行很好地加载,快速查看
~/perl5
确认了我的怀疑,本地::lib劫持了我的CPAN会话,并将这些模块安装在那里而不是整个站点的位置,尽管我的CPAN配置包括

makepl_arg         [INSTALLDIRS=site]
mbuildpl_arg       [--installdirs site]
我需要对我的CPAN配置做些什么,这样即使安装了local::lib,模块也可以在站点范围内安装?或者Padre在没有它的情况下工作,我可以完全删除local::lib吗

(我不希望在
~/perl5
下安装任何模块,除非Padre坚持要安装。我正在开发的代码有自己的特定于项目的目录位置,其他所有内容都应该是站点范围的。我不需要一个私有的全包位置。)

基于,似乎
local::lib
安装了自己的CPAN.pm版本。如果是这种情况,您可能需要找到原始的CPAN.pm,并确保在运行CPANshell时加载了该CPAN.pm。比如:

perl -I /usr/lib/perl5 -MCPAN -e shell

也许可以。您可能还发现
perl-V
有助于查看perl编译器用于其模块的include路径。

明白了。根据上的说明,我已经设置了导出PERL\u MM\u OPT='INSTALL\u BASE=~me/PERL',它覆盖了我的CPAN配置中的设置。快速
导出PERL\u MM\u OPT=
将我带回正确的安装位置

一方面,这就是我盲目遵循指示所得到的。另一方面,我希望
o conf
显示正在使用的实际配置设置,而不是保存的CPAN配置中的设置(即使环境变量正在覆盖它们)

快速导出PERL_MM_OPT=将我带回正确的安装位置

当我试图在全球范围内安装Starman时,这对我没有帮助。我必须编辑/root/.bashrc才能评论(或删除)下一行:

  • export PERL_LOCAL_LIB_ROOT=“$PERL_LOCAL_LIB_ROOT:/ROOT/perl5”
  • export PERL_MB_OPT=“--install_base/root/perl5”
  • export PERL_MM_OPT=“INSTALL_BASE=/root/perl5”
  • export PERL5LIB=“/root/perl5/lib/perl5:$PERL5LIB”
  • 导出路径=“/root/perl5/bin:$PATH”
    哪个perl
    显示了什么?如果它不是
    /usr/bin/perl
    ,您可能只想调用
    /usr/bin/perl-MCPAN-eshell
    。这主意不错,但它确实显示了
    /usr/bin/perl
    。不,模块仍在
    ~/perl5
    下安装,即使
    -I/usr/lib/perl5
    和从@INC.OK删除的
    ~/perl5
    下的所有目录,这将告诉您正在加载哪个CPAN.pm模块:
    perl-MCPAN-le'print$INC{“CPAN.pm”}“
    它打印什么?
    /usr/share/perl/5.10/CPAN.pm
    查看该文件,它是
    $CPAN::VERSION='1.9402',所以它看起来像是一个普通的CPAN.pm.OK,这就是为什么我认为local::lib、perlbrew等虽然在技术上是好的,但在社会上是坏的。它应该让那些已经了解这个过程的人更容易理解,而不是让你忽略它为你做的事情。沉默了很久,我同意了,我最终因为服务器问题而发疯,模块没有为用户正确升级,发现这是因为帐户有local::lib,并且模块仅在系统范围内更新。现在,我注定要花大约4年的时间(我回复这篇文章所花的时间)把头发放回合适的毛囊里。