如何在没有root权限的情况下安装Perl模块?

如何在没有root权限的情况下安装Perl模块?,perl,installation,cpan,Perl,Installation,Cpan,我在一台没有根权限的Linux机器上。我想通过CPAN将一些软件包安装到我的主目录中,这样当我运行Perl时,它就能看到它 我运行了cpan,它要求一些配置选项。它要求提供一些目录,建议为非root用户提供~/perl。尽管如此,当我尝试安装软件包时,它在make install步骤失败,因为我没有/usr/lib/perl5/任何东西的写入权限 如何配置CPAN以便将软件包安装到主目录中?请参阅 安装后,您可以执行以下操作: perl-MCPAN-Mlocal::lib-e'CPAN::ins

我在一台没有根权限的Linux机器上。我想通过CPAN将一些软件包安装到我的主目录中,这样当我运行Perl时,它就能看到它

我运行了
cpan
,它要求一些配置选项。它要求提供一些目录,建议为非root用户提供
~/perl
。尽管如此,当我尝试安装软件包时,它在
make install
步骤失败,因为我没有
/usr/lib/perl5/任何东西的写入权限

如何配置CPAN以便将软件包安装到主目录中?

请参阅

安装后,您可以执行以下操作:

perl-MCPAN-Mlocal::lib-e'CPAN::install(LWP)


有一种方法记录在中,这就是为您所做的

这也是一个常见的问题:

奇怪的是,当我使用你最初的问题标题时,这些都没有被提及(这也是一个好的标题在找到你的答案时非常重要的原因之一)


如何保存自己的模块/库目录

构建模块时,告诉Perl模块的安装位置

如果您想安装供自己使用的模块,最简单的方法可能是local::lib,您可以从CPAN下载它。它为您设置各种安装设置,并在程序中使用相同的设置

如果您想要更大的灵活性,您需要为您的特定情况配置您的CPAN客户端

对于基于Makefile.PL的发行版,在生成Makefile时使用INSTALL_BASE选项:

perl Makefile.PL INSTALL_BASE=/mydir/perl
您可以在CPAN.pm配置中设置此选项,以便在使用CPAN.pm shell时,模块自动安装在您的私有库目录中:

% cpan
cpan> o conf makepl_arg INSTALL_BASE=/mydir/perl
cpan> o conf commit
对于基于Build.PL的发行版,请使用--install_base选项:

perl Build.PL --install_base /mydir/perl
您也可以将CPAN.pm配置为自动使用此选项:

% cpan
cpan> o conf mbuild_arg "--install_base /mydir/perl"
cpan> o conf commit
INSTALL_BASE告诉这些工具将模块放入/mydir/perl/lib/perl5。查看如何在运行时将目录添加到include路径(@INC)?有关如何运行新安装的模块的详细信息

不过,INSTALL_BASE有一个警告,因为它与旧版本的ExtUtils::MakeMaker提倡的前缀和LIB设置不同。INSTALL_BASE不支持在同一目录下为多个版本的Perl或不同体系结构安装模块。你应该考虑如果你真的想要,如果你这样做,使用旧的前缀和LIB设置。有关更多详细信息,请参阅ExtUtils::Makemaker文档。

CPAN方式
  • 运行
    cpan
    命令。如果没有配置CPAN,请先配置!否则,您将看到cpan提示。在本例中,键入
    looklocal::lib
    ,您将得到一个新的shell提示符。在这个新的shell中,运行bootstrap命令,在下面的步骤中同时配置和编译模块

    user@host:~/.cpan/build/local-lib-1.004003-UyX2wf$perl Makefile.PL——引导、测试和安装

  • 现在,导出一些变量:

    local::lib将在其中安装内容的路径

    echo'eval$(perl-I$index.t/perl5/lib/perl5-Mlocal::lib)>~/.bashrc

    和Perl变量以避免用户输入

    echo'export PERL\u MM\u USE\u DEFAULT=1'>>~/.bashrc

  • 现在加载正在运行的bashrc

    source~/.bashrc

  • 尝试安装正在运行的
    cpan

  • 就这样!现在您可以使用cpan安装模块,而无需root权限。但是,请记住,这只适用于当前用户,包括根用户

    cpanminus路 如果你安装了这个,你的系统管理员应该得到一杯啤酒

    快跑

    $cpanm--local lib=~/perl5 local::lib&&eval$(perl-I~/perl5/lib/perl5/-Mlocal::lib)

    打开另一个终端并运行

    $env| grep PERL

    您应该看到如下内容:

    PERL5LIB=$HOME/perl5/lib/perl5 PERL_MB_OPT=--install_base“$HOME/perl5”

    PERL_LOCAL_LIB_ROOT=$HOME/perl5

    PERL\u MM\u OPT=INSTALL\u BASE=$HOME/perl5

    但如果不是,请导出如下变量:

    $echo“export PERL5LIB=\”$HOME/perl5/lib/perl5\”>~/.bashrc&&\
    echo“export PERL\u MB\u OPT=\”--install\u base'$HOME/perl5'\”>~/.bashrc&&\
    echo“export PERL\u LOCAL\u LIB\u ROOT=$HOME/perl5”>>~/.bashrc

    最后,加载bashrc文件并尝试使用命令进行安装

    source~/.bashrc

    cpanm


    Fim!

    可能与@Ether重复。我同意。我还建议使用perlbrew,这在问题“如何使用perlbrew在我的家中安装Perl版本?”?“不工作的可能副本:
    mkdir/root/.cpan:perl5/5.8.5/cpan.pm第2342行的权限被拒绝。有没有办法测试local::lib是否已正确安装
    perl
    5.8.5被删除。这就是问题所在。只是评论说“cpanminus方式”似乎在基于Debian或Ubuntu的系统上工作得很好,在这些系统中,您没有根访问权限。假设安装了Debian软件包
    cpanminus
    ,您可以如上所述指定一个自定义安装目录,然后安装像
    cpanm-Tk
    这样的复杂软件包,一切正常™ (假设路径中安装了C编译器等。)