代码之家  ›  专栏  ›  技术社区  ›  Juan A. Navarro

如何将CPAN用作非根用户?

  •  73
  • Juan A. Navarro  · 技术社区  · 14 年前

    我想在我没有根访问权限的共享服务器上安装perl模块。我该怎么做?他们似乎还有一个旧版本的CPAN(它在运行命令时会抱怨这个问题),是否可以从我的帐户更新正在使用的CPAN命令而不需要根访问权限?

    4 回复  |  直到 14 年前
        1
  •  139
  •   Britton Kerin    10 年前

    wget -O- http://cpanmin.us | perl - -l ~/perl5 App::cpanminus local::lib
    eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`
    echo 'eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`' >> ~/.profile
    echo 'export MANPATH=$HOME/perl5/man:$MANPATH' >> ~/.profile
    

    这假设您的配置文件名为 .profile ,您可能需要将其更改为 .bash_profile , .bashrc ,然后您可以通过以下方式安装模块

    cpanm Module::Name
    

    并且只需以与在根目录中安装相同的方式使用它们。


    wget -O- http://cpanmin.us 获取最新版本的 cpanm 并打印到 STDOUT 然后通过管道输送到 perl - -l ~/perl5 App::cpanminus local::lib . 第一个 - 告诉 perl 期待节目的播出 STDIN ,这使 perl语言 运行的版本 我们刚下载了。 perl语言 . 这个 -l ~/perl5 cpanm公司 在何处安装Perl模块,另外两个参数是要安装的两个模块。 [App::cpanmins ] 1 是安装的包 . local::lib 是一个帮助程序模块,用于管理在本地目录中运行模块所需的环境变量。

    eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`
    

    设置使用本地模块所需的环境变量,然后

    echo 'eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`' >> ~/.profile
    

    以确保下次登录时能够使用它们。

    echo 'export MANPATH=$HOME/perl5/man:$MANPATH' >> ~/.profile
    

        2
  •  12
  •   Community Jaime Torres    7 年前

    http://web.archive.org/web/20120427144232/http://perl.jonallen.info/writing/articles/install-perl-modules-without-root

    http://novosial.org/perl/life-with-cpan/non-root/

    这两套指令的主要步骤都涉及 local::lib module

    AFAIK,CPAN逻辑包含在Perl模块(CPAN.pm)中,这意味着您还可以像安装任何其他Perl模块一样,在本地目录中轻松地安装较新的逻辑。


    How does a Perl program know where to find the file containing Perl module it uses?

    How is Perl’s @INC constructed? (也就是说,影响Perl模块搜索位置的所有方法是什么?)

        3
  •  6
  •   Juan A. Navarro    13 年前

    为完整起见,这是的安装过程 cpanm 如果你想保持 perl5 ~/Library .

    curl -L http://cpanmin.us | perl - -l ~/Library/perl5 App::cpanminus local::lib
    eval `perl -I ~/Library/perl5/lib/perl5 -Mlocal::lib=~/Library/perl5`
    echo 'eval `perl -I ~/Library/perl5/lib/perl5 -Mlocal::lib=~/Library/perl5`' >> ~/.bash_profile
    
        4
  •  2
  •   Britton Kerin    8 年前

     export MANPATH=$HOME/Library/perl5/man:$MANPATH' >> ~/.bash_profile
    
        5
  •  0
  •   Yordan Georgiev    4 年前

    the following func 在过去的6个月中,在20多个部署中,成功地自动部署到aws。。。从主配置调用 as follows ,它基本上只是上面答案的复制粘贴,但是在一个可重用的bash脚本中:

     #! /usr/bin/env bash                                                                                                                                                     │··  
                                                                                                                                                                               │··
      # a bash wrapper for check-installing required perl modules as non-root  
    main(){                                                                                                                                                                  │··
         doSetVars                                                                                                                                                             │··
         doCheckInstallPreReqs                                                                                                                                                 │··
         perl $PRODUCT_INSTANCE_DIR/src/perl/my-perl-script.t                                                                                                                          │··
      }                                                                                                                                                                        │··
                                                                                                                                                                               │··
      doSetVars(){                                                                                                                                                             │··
         #set -x                                                                                                                                                               │··
         umask 022    ;                                                                                                                                                        │··
         set -u -o pipefail                                                                                                                                                    │··
         run_unit_bash_dir=$(perl -e 'use File::Basename; use Cwd "abs_path"; print dirname(abs_path(@ARGV[0]));' -- "$0")                                                     │··
         export PRODUCT_INSTANCE_DIR=$run_unit_bash_dir/../..                                                                                                                  │··
      }                                                                                                                                                                        │··
                                                                                                                                                                               │··
      doCheckInstallPreReqs(){                                                                                                                                                 │··
         eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`                                                                                                                         │··
         perl -e '                                                                                                                                                             │··
            use JSON ;                                                                                                                                                         │··
            use Data::Printer;                                                                                                                                                 │··
            use Test::Most ;                                                                                                                                                   │··
            use Test::Mojo;                                                                                                                                                    │··
            use Data::Printer ;                                                                                                                                                │··
            use FindBin;                                                                                                                                                       │··
            use JSON::Parse ;                                                                                                                                                  │··
            use IPC::System::Simple ;                                                                                                                                          │··
            use Mojolicious ;                                                                                                                                                  │··
         ' || {                                                                                                                                                                │··
               curl -L http://cpanmin.us | perl - -l ~/perl5 App::cpanminus local::lib                                                                                         │··
               eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`                                                                                                                   │··
               echo 'eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`' >> ~/.bashrc                                                                                               │··
               cpanm --local-lib=~/perl5 local::lib && eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib)                                                                         │··
               export PERL_MM_USE_DEFAULT=1                                                                                                                                    │··
               cpanm JSON Data::Printer Test::Most Test::Mojo Data::Printer FindBin JSON::Parse \                                                                              │··
                  IPC::System::Simple                                                                                                                                          │··
               sudo curl -L cpanmin.us | perl - Mojolicious                                                                                                                    │··
         }                                                                                                                                                                     │··
                                                                                                                                                                               │··
      }                                                                                                                                                                        │··
                                                                                                                                                                               │··
      main