perl模块安装大全

今天又有小伙伴微信问我perl模块安装的问题,因为ENSEMBL发布的大多数数据库以及软件都是基于perl的,尤其是分量很重的VEP,所以即使你再如何如何的讨厌perl,也不得不与之打交道。

这种细节问题问我,我当然无法直接给出答案咯。毕竟,我的知识积累都不是靠死记硬背的。所以需要取回过头查看一下我的博客,才意识到,我竟然已经写了7篇教程,关于perl的模块。目录如下:

  • ubuntu服务器解决方案第七讲-perl安装模块

  • Perl用cpan在linux上面安装模块

  • Perl及R及python模块碎碎念

  • perl模块终极解决方案-上

  • perl模块终极解决方案-下

  • perl程序技巧-检验系统环境或模块安装

首先需要自己确定已经安装了哪些模块,都安装在哪里?还有新的模块需要安装到哪里? 然后再学习如何安装新的模块。

装Perl模块有两种方法

  • 自动安装 (使用CPAN模块自动完成下载、编译、安装的全过程)

  • 手工安装 (去CPAN网站下载所需要的模块,手工编译、安装)

使用CPAN模块自动安装

安装前需要先联上网,有无root权限均可。

初次运行CPAN时需要做一些设置,运行下面的命令即可:

  1. perl -MCPAN -e shell

如果你的机器是直接与因特网相联(拨号上网、专线,etc.),那么一路回车就行了,只需要在最后一步选一个离您最近的 CPAN 镜像站点。例如我选的是位于国内的http://www.cnblogs.com/itech/admin/ftp://www.perl87.cn/CPAN/

如果你的机器位于防火墙之后,还需要设置ftp代理或http代理。

其实大部分人的机器都不需要走这一步的,肯定是用过了perl的cpan功能啦,除非你是新买的电脑。

下面是常用 cpan 命令。

  1. cpan>help

  2. cpan>m

  3. cpan>install Net::Server

  4. cpan>quit

我简单解释一下吧:

  1. 查询:cpan[1]> d /模块名字或者部分名字/

  2. 查询结果中会给出所有含有模块名字或者部分名字的模块,选择您所需要的模块进行下载

  3. 下载安装:cpan[1]>  install  模块名字

  4. 同时会自动安装很多依赖的模块,非常方便。

手工安装的步骤:

一般情况下不推荐这种安装方式,但是总是会有迫不得已的时候,而且尝试这种方式,能加深对perl模块的理解。

比如从 CPAN下载了Net-Server模块0.97版的压缩文件Net-Server-0.97.tar.gz,假设放在/usr/local/src/下。

  1. cd /usr/local/src

  2. tar xvzf Net-Server-0.97.tar.gz

  3. cd Net-Server-0.97

  4. perl Makefile.PL

  5. make test

如果测试结果报告all test ok,你就可以放心地安装编译好的模块了。 安装模块前,先要确保你对你下载包的文件夹(例子里面是/usr/local/src/)有可写权限(通常以 su 命令获得). 当然,只有root用户才会/usr/local/src/有写入的权限,普通用户把模块文件下载到自己的文件夹即可。

测试自己的模块安装成功与否,用下面的命令,如果没有给出任何输出,那就没问题。

  1. perl -MNet::Server -e1

上述步骤适合于 Linux/Unix下绝大多数的Perl模块。可能还有少数模块的安装方法略有差别,所以最好先看看安装目录里的 README 或 INSTALL。

有的时候如果是build.pl的需要以下安装步骤:(需要Module::Build模块支持)

  1. perl Build.PL

  2. ./Build

  3. ./Build test

  4. ./Build install

cpan和root权限的关系

前面我说过,是否有root权限,都可以调用cpan下载器的,但还是有些微区别的。

如果是root用户,模块其实没有问题,直接用cpan下载器,几乎能解决所有的模块下载安装问题!

但是如果是非root用户,那么就麻烦了,很难用自动的cpan下载器,总有一些模块用cpan下载失败。

这样只能下载模块源码,然后编译,但是编译有个问题,很多模块居然是依赖于其它模块的,你的不停地下载其它依赖模块,最后才能解决,特别麻烦! 但是我仍然不推荐大家用手工下载的方式安装perl模块。 这里我推荐所有的非root用户运行下面的代码获取自己的私人cpan下载器。

  1. wget -O- http://cpanmin.us | perl - -l ~/perl5 App::cpanminus local::lib

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

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

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

就能拥有一个私人的cpan下载器,~/.profile可能需要更改为.bash_profile, .bashrc, etc等等,取决于你的linux系统! 然后你直接运行cpanm Module::Name,就跟root用户一样的可以下载模块啦! 或者用下面的方式在shell里面安装模块,其中ext是模块的安装目录,可以修改!

  1. perl -MTime::HiRes -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext Time::HiRes;

  2. perl -MFile::Path -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext File::Path;

  3. perl -MFile::Basename -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext File::Basename;

  4. perl -MFile::Copy -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext File::Copy;

  5. perl -MIO::Handle -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext IO::Handle;

  6. perl -MYAML::XS -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext YAML::XS;

  7. perl -MYAML -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext YAML;

  8. perl -MXML::Simple -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext XML::Simple;

  9. perl -MStorable -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext Storable;

  10. perl -MStatistics::Descriptive -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext Statistics::Descriptive;

  11. perl -MTie::IxHash -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext Tie::IxHash;

  12. perl -MAlgorithm::Combinatorics -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext Algorithm::Combinatorics;

  13. perl -MDevel::Size -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext Devel::Size;

  14. perl -MSort::Key::Radix -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext Sort::Key::Radix;

  15. perl -MSort::Key -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext Sort::Key;

  16. perl -MBit::Vector -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext Bit::Vector;

  17. perl -M"feature 'switch'" -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext feature;

非root用户的另一个解决方案

手动下载local::lib, 这个perl模块,然后自己安装在指定目录,也是能解决模块的问题!

下载之后解压,进入:

  1. perl Makefile.PL --bootstrap=~/.perl  ##这里设置你想把模块放置的目录

  2. make test && make install

  3. echo 'eval $(perl -I$HOME/.perl/lib/perl5 -Mlocal::lib=$HOME/.perl)' >> ~/.bashrc

等待几个小时即可!!!

添加好环境变量之后,就可以用

  1. perl -MCPAN -Mlocal::lib -e 'CPAN::install(LWP)'

这样的模式下载模块了,所有的模块都会存储在$HOME/.perl/lib/perl5 里面!!! 如果是新写的perl程序,需要在开头加入 use local::lib; 
这样才能sets up a local lib at ~/perl5,才能使用该模块!

当然每次写程序添加这个也实在是太麻烦了,其实你也可以直接打开 ~/.bashrc,然后写入下面的内容

  1. PERL5LIB=$PERL5LIB:/PATH_WHERE_YOU_PUT_THE_PACKAGE/source/bin/perl_module;

  2. #(笨蛋,这个里面的内容-路径-是需要你修改的,别直接拷贝粘贴哈)

  3. export PERL5LIB

可以把perl模块安装在任何地方,然后通过这种方式去把模块加载到你的perl程序!

  1. PATH="/home/jmzeng/perl5/bin${PATH:+:${PATH}}"; export PATH;

  2. PERL5LIB="/home/jmzeng/perl5/lib/perl5${PERL5LIB:+:${PERL5LIB}}"; export PERL5LIB;

  3. PERL_LOCAL_LIB_ROOT="/home/jmzeng/perl5${PERL_LOCAL_LIB_ROOT:+:${PERL_LOCAL_LIB_ROOT}}"; export PERL_LOCAL_LIB_ROOT;

  4. PERL_MB_OPT="--install_base \"/home/jmzeng/perl5\""; export PERL_MB_OPT;

  5. PERL_MM_OPT="INSTALL_BASE=/home/jmzeng/perl5"; export PERL_MM_OPT;

查看perl模块的安装目录

这里指的是查看那些被添加到了环境变量的perl模块安装目录,理论上你可以在如何文件夹里面安装一个perl模块,但是如果不添加到环境变量,意义不大,因为大多数perl程序只会在环境变量里面搜索安装的perl模块,其它地方的模块它们无法调用。

主要就是@INC这个默认变量 ,可以用下面的代码查看:

  1. perl -e '{print "$_\n" foreach @INC}'

比如我其中一个服务器显示如下:

  1. /home/jmzeng/perl5/lib/perl5/5.18.2/x86_64-linux-gnu-thread-multi

  2. /home/jmzeng/perl5/lib/perl5/5.18.2

  3. /home/jmzeng/perl5/lib/perl5/x86_64-linux-gnu-thread-multi

  4. /home/jmzeng/perl5/lib/perl5

  5. /etc/perl

  6. /usr/local/lib/perl/5.18.2

  7. /usr/local/share/perl/5.18.2

  8. /usr/lib/perl5

  9. /usr/share/perl5

  10. /usr/lib/perl/5.18

  11. /usr/share/perl/5.18

  12. /home/jmzeng/perl5/lib/perl5/5.18.1

  13. /usr/local/lib/site_perl

查看已经安装哪些perl模块

不管你有没有root权限,进入 cpan 然后install ExtUtils::Installed模块 这样就可以执行 instmodsh 这个命令了,可以查看当前环境下所有的模块! 为什么可以直接使用呢,因为模块安装的时候就顺便把instmodsh给你添加到了环境变量,你可以用 which instmodsh 查看它被安装到哪里了。

  1. /usr/bin/instmodsh

  2. /home/jmzeng/perl5/bin/instmodsh

当然也可以写出脚本来利用这个模块查询其它模块安装信息,主要是写脚本校验用户电脑模块的时候用得着。

  1. #!/usr/bin/perl

  2. use strict;

  3. use ExtUtils::Installed;

  4. my $inst= ExtUtils::Installed->new();

  5. my @modules = $inst->modules();

  6. foreach(@modules)

  7. {

  8.    my $ver = $inst->version($_) || "???";

  9.    printf("%-12s -- %s\n", $_, $ver);

  10. }

  11. exit 0;

模块理论上可以安装到如何地方

比如非root用户,使用 cpan ,那么一般会创建/home/yourname/.cpan这个隐藏目录下面存储个人的perl模块。 因为不是root用户,所以cpan并不是万能的,有些包是安装不成功的,比如GD模块 而且也可以直接下载模块文件,自己编译到任何目录,只需要在运行自己的脚本的时候加上下面一句话。

  1. use lib '/home/your-home/perl_lib';

但是,大部分情况下,我们安装模块不是因为我们自己写脚本需要,而且一些生物信息学软件对模块有依赖,但是我们很少有能力修改那些生物信息学软件。 所以这条路一般是不走的。 如果有很多自己下载的包,统一安装到了一个目录,就可以把该目录添加目录到@INC。

(0)

相关推荐