我怎样才能使用CPAN作为非root用户?

我想安装perl模块在我没有root权限的共享服务器上。 我怎样才能做到这一点? 他们似乎也有一个较旧版本的CPAN(它在运行命令时抱怨),是否有可能更新从我的帐户使用的CPAN命令,而无需root访问?

我目前发现的最简单的方法就是说

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 

这假定您的configuration文件被命名为.profile ,您可能需要将其更改为.bash_profile.bashrc等。之后,您可以通过说

 cpanm Module::Name 

如果安装在根目录中,只需使用它们即可。


以下是对上述命令的简要说明。

wget -O- http://cpanmin.us获取最新版本的cpanm并将其打印到STDOUT ,然后通过pipe道连接到perl - -l ~/perl5 App::cpanminus local::lib 。 第一个-告诉perl期望程序进入STDIN ,这使得perl运行我们刚刚下载的cpanm版本。 perl将其余的parameter passing给cpanmcpanm -l ~/perl5参数告诉cpanm在哪里安装Perl模块,另外两个参数是两个要安装的模块。 [App::cpanmins ] 1是安装cpanm的软件包。 local::lib是一个辅助模块,它pipe理在本地目录中运行模块所需的环境variables。

安装这些模块后,我们运行

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

设置使用本地模块所需的环境variables

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

以确保我们能够在下次login时使用它们。

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

将有望使人find你本地模块的手册页。

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模块

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


此外,一旦您将模块安装到非标准位置,请查看有关从非标准位置加载库的以下两个问题(部分信息已在上面的链接中提供):

Perl程序如何知道在哪里可以find包含Perl模块的文件?

Perl的@INC是如何构build的? (又名什么是影响Perl模块search的方法?

为了完整cpanm ,这是OSX上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 

如果您希望能够读取cpanminus安装模块的手册页,则还应确保所选库path的正确子目录位于MANPATH中。 所以上面的解决scheme显示了cpanm的安装过程需要下面的附加命令:

  export MANPATH=$HOME/Library/perl5/man:$MANPATH' >> ~/.bash_profile