【问题标题】:How do I install a CPAN module site-wide while local::lib is present?当 local::lib 存在时,如何在站点范围内安装 CPAN 模块?
【发布时间】:2011-04-29 05:19:26
【问题描述】:

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

然后是时候测试其中一个需要这些模块支持的 Web 应用程序了,你瞧,apache 找不到它们。尽管我的 CPAN 配置包括

makepl_arg         [INSTALLDIRS=site]
mbuildpl_arg       [--installdirs site]

我需要对我的 CPAN 配置做些什么,以便在安装了 local::lib 的情况下在站点范围内安装模块?或者 Padre 可以在没有它的情况下工作,而我可以完全删除 local::lib?

(我希望在~/perl5 下安装任何模块,除非 Padre 坚持要求它们在那里。我正在开发的代码有自己的项目特定目录位置和其他所有内容都应该在站点范围内。我不需要私人的包罗万象的位置。)

【问题讨论】:

  • which perl 显示什么?如果不是/usr/bin/perl,您可能只想调用/usr/bin/perl -MCPAN -e shell
  • 好主意,但它确实显示/usr/bin/perl

标签: perl cpan locallib padre


【解决方案1】:

快速导出 PERL_MM_OPT= 让我回到了正确的安装位置。

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

  1. 导出 PERL_LOCAL_LIB_ROOT="$PERL_LOCAL_LIB_ROOT:/root/perl5";
  2. export PERL_MB_OPT="--install_base /root/perl5";
  3. 导出 PERL_MM_OPT="INSTALL_BASE=/root/perl5";
  4. export PERL5LIB="/root/perl5/lib/perl5:$PERL5LIB";
  5. export PATH="/root/perl5/bin:$PATH";

【讨论】:

    【解决方案2】:

    知道了。根据local::lib's CPAN page 上的说明,我设置了export PERL_MM_OPT='INSTALL_BASE=~me/perl',它覆盖了我的CPAN 配置中的设置。一个快速的export PERL_MM_OPT= 让我回到了正确的安装位置。

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

    【讨论】:

    • 这就是为什么我认为 local::lib、perlbrew 等虽然在技术上很好,但在社会上却很糟糕。它应该让那些已经了解流程的人更容易,而不是让它让你可以忽略它对你的作用。
    • 长时间的沉默同意,我最终因为服务器问题而全力以赴,因为模块没有为用户正确升级,发现这是因为该帐户具有本地: :lib 和模块只在系统范围内更新。现在我注定要花大约 4 年的时间(我回复这篇文章所花费的时间)才能将我的头发放回合适的毛囊中。
    【解决方案3】:

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

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

    可能会这样做。您可能还会发现 perl -V 对于查看 Perl 编译器为其模块使用的包含路径很有用。

    【讨论】:

    • 不,模块仍在~/perl5 下安装,即使-I /usr/lib/perl5~/perl5 下的所有目录都已从@INC 中删除。
    • 好的,这将告诉您正在加载哪个 CPAN.pm 模块:perl -MCPAN -le 'print $INC{"CPAN.pm"}' 它打印什么?
    • /usr/share/perl/5.10/CPAN.pm
    • 查看那个文件,它是$CPAN::VERSION = '1.9402';,所以它看起来是一个普通的CPAN.pm。
    • 好的,search.cpan.org/~andk/CPAN-1.9402/lib/CPAN.pm 的常见问题解答 5 有帮助吗?
    猜你喜欢
    • 2013-07-11
    • 2013-09-24
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 2014-10-26
    • 2011-05-17
    • 2018-03-28
    • 2023-03-16
    相关资源
    最近更新 更多