我在Linux机器上,我没有root权限。我想通过CPAN将一些软件包安装到我的主目录中,这样当我运行Perl时,它就能看到它。
我跑了cpan
,要求提供一些配置选项。它要求提供一些目录,它为非root用户建议~/perl
“。但是,当我尝试安装软件包时,它在make install
步骤失败,因为我没有/usr/lib/perl5/whatever
的写访问权。
如何配置CPAN以便我可以将软件包安装到我的主目录中?
答案 0 :(得分:27)
答案 1 :(得分:25)
perlfaq8中记录的方式是local::lib正在为您做的事情。
这也是一个经常被问到的StackOverflow问题:
当我使用原始问题标题时,这些都不是建议的(这是一个好标题在找到答案时非常重要的原因之一)。
如何保留自己的模块/库目录?
构建模块时,请告诉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。请参阅如何在运行时将目录添加到包含路径(@INC)?有关如何运行新安装的模块的详细信息。
但是,INSTALL_BASE有一个警告,因为它的行为与旧版ExtUtils :: MakeMaker所倡导的PREFIX和LIB设置不同。 INSTALL_BASE不支持在同一目录下为多个Perl版本或不同体系结构安装模块。您应该考虑是否真的需要它,如果这样做,请使用较旧的PREFIX和LIB设置。有关更多详细信息,请参阅ExtUtils :: Makemaker文档。
答案 2 :(得分:0)
运行cpan
命令。如果您尚未配置CPAN,请先进行配置!否则,您会看到 cpan 提示符。在这种情况下,键入look local::lib
,您将看到一个新的shell提示符。在此新外壳中,运行 bootstrap 命令以在下面同时配置和编译模块。
user@host:~/.cpan/build/local-lib-1.004003-UyX2wf$ perl Makefile.PL --bootstrap && make test && make install
现在,导出一些变量:
local :: lib安装文件的路径
echo 'eval $(perl -I$index.t/perl5/lib/perl5 -Mlocal::lib)' >> ~/.bashrc
和Perl变量以避免用户输入
echo 'export PERL_MM_USE_DEFAULT=1' >> ~/.bashrc
现在加载正在运行的 bashrc
source ~/.bashrc
尝试安装正在运行的cpan <SOME_VALID_MODULE_NAMESPACE>
就是这样!现在,您可以使用不具有root特权的cpan安装模块。但是请记住,这仅对 CURRENT USER (包括 root用户!
)有效。如果已安装此系统,则系统管理员应配啤酒!
只要运行
$ 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_MM_OPT = INSTALL_BASE = $ HOME / perl5
但是,如果不是,请像这样导出变量:
$ echo "export PERL5LIB=\"$HOME/perl5/lib/perl5\"">>~/.bashrc && \
echo "export PERL_MB_OPT=\"--install_base '$HOME/perl5'\">>~/.bashrc && \
echo "export PERL_LOCAL_LIB_ROOT=$HOME/perl5">>~/.bashrc
最后,加载您的 bashrc 文件并尝试使用命令进行安装
source ~/.bashrc
和
cpanm <SOME_VALID_MODULE_NAMESPACE>
老兄!