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时需要做一些设置,运行下面的命令即可:

perl -MCPAN -e shell

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

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

下面是常用 cpan 命令。

cpan>helpcpan>mcpan>install Net::Servercpan>quit

我简单解释一下吧:

查询:cpan[1]> d /模块名字或者部分名字/查询结果中会给出所有含有模块名字或者部分名字的模块,选择您所需要的模块进行下载下载安装:cpan[1]>  install  模块名字同时会自动安装很多依赖的模块,非常方便。

手工安装的步骤:

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

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

cd /usr/local/srctar xvzf Net-Server-0.97.tar.gzcd Net-Server-0.97perl Makefile.PLmake test

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

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

perl -MNet::Server -e1

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

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

perl Build.PL./Build./Build test./Build install

cpan和root权限的关系

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

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

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

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

wget -O- http://cpanmin.us | perl - -l ~/perl5 App::cpanminus local::libeval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`echo 'eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`' >> ~/.profileecho 'export MANPATH=$HOME/perl5/man:$MANPATH' >> ~/.profile

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

perl -MTime::HiRes -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext Time::HiRes;perl -MFile::Path -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext File::Path;perl -MFile::Basename -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext File::Basename;perl -MFile::Copy -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext File::Copy;perl -MIO::Handle -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext IO::Handle;perl -MYAML::XS -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext YAML::XS;perl -MYAML -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext YAML;perl -MXML::Simple -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext XML::Simple;perl -MStorable -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext Storable;perl -MStatistics::Descriptive -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext Statistics::Descriptive;perl -MTie::IxHash -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext Tie::IxHash;perl -MAlgorithm::Combinatorics -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext Algorithm::Combinatorics;perl -MDevel::Size -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext Devel::Size;perl -MSort::Key::Radix -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext Sort::Key::Radix;perl -MSort::Key -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext Sort::Key;perl -MBit::Vector -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext Bit::Vector;perl -M"feature 'switch'" -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext feature;

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

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

下载之后解压,进入:

perl Makefile.PL --bootstrap=~/.perl  ##这里设置你想把模块放置的目录make test && make installecho 'eval $(perl -I$HOME/.perl/lib/perl5 -Mlocal::lib=$HOME/.perl)' >> ~/.bashrc

等待几个小时即可!!!

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

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

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

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

PERL5LIB=$PERL5LIB:/PATH_WHERE_YOU_PUT_THE_PACKAGE/source/bin/perl_module; #(笨蛋,这个里面的内容-路径-是需要你修改的,别直接拷贝粘贴哈)export PERL5LIB

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

PATH="/home/jmzeng/perl5/bin${PATH:+:${PATH}}"; export PATH;PERL5LIB="/home/jmzeng/perl5/lib/perl5${PERL5LIB:+:${PERL5LIB}}"; export PERL5LIB;PERL_LOCAL_LIB_ROOT="/home/jmzeng/perl5${PERL_LOCAL_LIB_ROOT:+:${PERL_LOCAL_LIB_ROOT}}"; export PERL_LOCAL_LIB_ROOT;PERL_MB_OPT="--install_base \"/home/jmzeng/perl5\""; export PERL_MB_OPT;PERL_MM_OPT="INSTALL_BASE=/home/jmzeng/perl5"; export PERL_MM_OPT;

查看perl模块的安装目录

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

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

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

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

/home/jmzeng/perl5/lib/perl5/5.18.2/x86_64-linux-gnu-thread-multi/home/jmzeng/perl5/lib/perl5/5.18.2/home/jmzeng/perl5/lib/perl5/x86_64-linux-gnu-thread-multi/home/jmzeng/perl5/lib/perl5/etc/perl/usr/local/lib/perl/5.18.2/usr/local/share/perl/5.18.2/usr/lib/perl5/usr/share/perl5/usr/lib/perl/5.18/usr/share/perl/5.18/home/jmzeng/perl5/lib/perl5/5.18.1/usr/local/lib/site_perl

查看已经安装哪些perl模块

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

/usr/bin/instmodsh/home/jmzeng/perl5/bin/instmodsh

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

#!/usr/bin/perluse strict;use ExtUtils::Installed;my $inst= ExtUtils::Installed->new();my @modules = $inst->modules();foreach(@modules){    my $ver = $inst->version($_) || "???";    printf("%-12s -- %s\n", $_, $ver);}exit 0; 

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

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

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

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

原文发布于微信公众号 - 生信技能树(biotrainee)

原文发表时间:2017-06-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小詹同学

Python系列之——手把手教你玩Pycharm

刚入门python的时候,一直觉得用哪个编辑器并没有差别,然而前两天发了一篇文章【Python系列之——如何每天跟女朋友说晚安~】,跟几个粉丝小伙伴在群里一起讨...

862
来自专栏HaHack

学习 React Native for Android:环境搭建

892
来自专栏刺客博客

搬迁新服发个教程: ssv3一键脚本

1083
来自专栏大数据-Hadoop、Spark

java -jar运行MR程序

894
来自专栏程序员互动联盟

浏览器开发系列第一篇:如何获取最新chromium源码

背景: 最近摊上一个事儿,领导非要让写一篇技术文章,思来想去,自己接触chrome浏览器时间也不短了,干脆就总结一下吧。于是乎,本文顺理成章。由于有些细节必需...

3619
来自专栏A周立SpringCloud

Docker系列教程26-Docker Compose控制服务启动顺序

在生产中,往往有严格控制服务启动顺序的需求。然而Docker Compose自身并不具备该能力。要想实现启动顺序的控制,Docker Compose建议我们使用...

1083
来自专栏杨建荣的学习笔记

goldengate学习-安装篇(71天)

goldengate算是数据同步的利器,可以在不同的库,平台间进行数据的同步,当然还是有一些bug的,不过还是优点大过缺点。 算是尝尝鲜,从官网下载了一个版本1...

34812
来自专栏mukekeheart的iOS之旅

iOS工具——Xcode9无证书真机调试

  入坑iOS开发这么久,一直都是在模拟器上运行,公司的项目也都有公司的开发者账号进行真机调试。但是很多时候在网上download一些demo想在真机上运行看一...

50110
来自专栏北京马哥教育

用python来更改小伙伴的windows开机密码,不给10块不给开机

1033
来自专栏coding

使用sqltools让sublime text成为数据库的客户端

1293

扫描关注云+社区