我怎样才能使用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给cpanm
。 cpanm
-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://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