如何将CPAN用作非root用户?

Jua*_*rro 76 perl cpan

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

Cha*_*ens 132

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

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
Run Code Online (Sandbox Code Playgroud)

这是假设你的个人资料被命名.profile,您可能需要更改是.bash_profile,.bashrc等以后你可以这样安装模块

cpanm Module::Name
Run Code Online (Sandbox Code Playgroud)

并简单地使用它们,就像在根目录中安装它们一样.


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

wget -O- http://cpanmin.us获取最新版本cpanm并将其打印到STDOUT然后通过管道传送到perl - -l ~/perl5 App::cpanminus local::lib.第一个-告诉perl我们期待程序进入STDIN,这使得perl运行cpanm我们刚刚下载的版本. perl将其余参数传递给cpanm.该-l ~/perl5参数告诉cpanm安装Perl模块的位置,另外两个参数是要安装的两个模块. [App::cpanmins] 1是安装的包cpanm. local::lib是一个帮助程序模块,用于管理在本地目录中运行模块所需的环境变量.

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

eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`
Run Code Online (Sandbox Code Playgroud)

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

echo 'eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`' >> ~/.profile
Run Code Online (Sandbox Code Playgroud)

确保我们下次登录时能够使用它们.

echo 'export MANPATH=$HOME/perl5/man:$MANPATH' >> ~/.profile
Run Code Online (Sandbox Code Playgroud)

希望能让人找到你本地模块的手册页.

  • 这对我来说非常好.只是一个小注释,首先删除〜/ .profile(或其他)中已有的任何现有PERL5LIB环境变量.否则,运行第一个命令时local :: lib将无法安装. (7认同)

DVK*_*DVK 12

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程序如何知道在哪里找到包含它使用的Perl模块的文件?

Perl的@INC是如何构建的?(又名影响Perl模块搜索的所有方法是什么?)

  • 从CPAN安装模块至少有四种不同的方法:手工,CPAN模块(及其命令行等效的`cpan`),`CPANPLUS`模块(及其命令行等效`cpanp`)和新的App ::安装`cpanm`的cpanminus发行版.其中,我发现`cpanm`是最容易安装和使用的.默认情况下安装`cpan`和`cpanp`,但需要大量设置才能正常工作. (2认同)

Jua*_*rro 6

为了完整,这是在安装过程中cpanm对OSX,如果你想保持你的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
Run Code Online (Sandbox Code Playgroud)