从cpan上安装perl模块


CPAN是perl的一个第三方源码模块库,里面有上百万的perl模块,用来支撑perl强大的功能,从生物工程到天文计算,从宏观世界到原子力学,无所不有。为了很方便的安装perl模块,有人做了一个CPAN模块,用cpan命令来管理和安装CPAN网站上的所有perl模块。perl有自带的模块,还有第三方模块。自带的模块是随perl安装而安装好的,第三方模块需要从CPAN(Comprehensive Perl Archive Network)上下载并安装,或从MetaCPAN上查找所需第三方模块。
可以借助perldoc 'MODULE_NAME'来间接查询一个模块是否已安装,如果安装了就能正常输出对应的文档,如果没有安装,则报错。如果想要查看所有已安装的module,则使用cpan -a,不过第一次使用它会要求你先进行一番配置,不过一般来说,选择让它自动配置即可。模块实际上都是perl脚本。在perl文化中,非常注重模块的开发人员以及维护人员。在每个模块相关的元数据属性中,都会记录他们的信息。以下是一个模块基本具备的信息:
Module id = File::Utils
CPAN_USERID PEKINGSAM (Yan Xueqing <yanxueqing10@163.com>)
CPAN_VERSION 0.000005
CPAN_FILE P/PE/PEKINGSAM/File-Utils-0.0.5.tar.gz
UPLOAD_DATE 2016-05-11
MANPAGE File::Utils - Provide various of file operation
INST_FILE /usr/local/share/perl5/File/Utils.pm
INST_VERSION 0.0.5
Module ID:模块ID,也就是模块的名称,即File::Utils
CPAN_USERID:上传这个模块的人在CPAN中的ID,后面是它的注册名和邮箱。从邮箱和名称来看,显然这是个中国人
CPAN_VERSION:这个模块的版本号
CPAN_FILE:这个模块的完整ID,这个ID称为Distribution id。这个ID由4部分组成:
第3部分是这个模块的上传者ID
第1部分是这个上传者ID的第一个字母
第2部分是上传者ID的前两个字母
第4部分是模块的源码包名称
UPLOAD_DATA:模块的上传时间
MANPAGE:man文档,可以通过man File::Utils获取该模块的帮助信息
INST_FILE:模块安装路径,如果没有安装该模块,则显示not installed
INST_VERSION:已安装的该模块版本号
通过Distribution id,可以直接推断出这个文件的URL。以网易的CPAN源镜像(http://mirrors.163.com/cpan/)为例,那么这个模块包的URL为:http://mirrors.163.com/cpan/authors/id/P/PE/PEKINGSAM/File-Utils-0.0.5.tar.gz。
有些工具需要指定Distribution id,4个部分毕竟比较复杂,其实可以指定后两个部分,一般来说可以自动补齐前两部分。
另外CPAN安装模块时,依赖于make编译工具,所以必须先安装好make。更简易安装好整个开发包可参考:Linux上安装Build Essentials。
手动编译安装模块
从网上下载好模块源码包,解压完成后进入源码包目录:
wget https://cpan.metacpan.org/authors/id/X/XS/XSAWYERX/Data-Dumper-2.172.tar.gz
tar xf Data-Dumper-2.172.tar.gz
cd Data-Dumper-2.172/
然后看看这个目录下,存在的文件是Makefile.PL还是Build.PL,这两种文件都可以用来编译安装,如果同时存在,则随便选择一种即可。
如果是Makefile.PL,所以安装:
perl Makefile.PL
make
make install
如果想要指定安装路径,则加上INSTALL_BASE即可:
perl Makefile.PL INSTALL_BASE=/home/perlapps
如果是Build.PL,则:
perl Build.PL
./Build
./Build install
如果想要指定安装路径,则加上perl Build.PL −−install_base /home/perlapps
如果是手动指定的安装路径,还需要设置模块查找路径环境变量:
export PERL5LIB=/home/perlapps
或者在perl程序内部,指定查找路径:
#!/usr/bin/perl
use lib qw(/home/perlapps);
手动编译安装时,很可能会因为额外的库依赖问题而导致编译中断。一般来说,对于提示缺少的库文件名$foo来说,Debian/Ubuntu上对应的库文件包是lib$foo-dev或$foo-dev,redhat系列上则是lib$foo-devel,使用包管理工具大致搜索一下即可。
-------------------
CPAN
cpan命令
cpan命令其实也是一个perl脚本,对于不同版本的perl,可能cpan命令的功能强弱有所不同;执行cpan,我们进入了一个类似bash的界面,暂且叫做cpanshell,cpanshell上可以像bash一样输入命令,这个命令是CPAN所特有的,我们一般常用到的cpan命令主要有:
help
help命令是显示帮助信息,这里面包含了所有的cpan命令,虽然看上去只有一屏,但功能确是非常强大。
m //
这个是一个模式,用来查找perl模块,有点像perl正则里面的m//,用于匹配(match),但这里m与//之间多了一个空格,且这里的m指'modules',意思是根据模块名称查找,//内可以使用正则; 同理a(authors)、b(bundles)、d(distributions)和i(in all)都有这种模式。
install
install命令是安装perl模块,一般是接模块名称,而不是压缩包名字。比如DBD::mysql,而不是DBD-mysql,即
install DBD::mysql
CPAN配置
CPAN安装是网络安装,如果没有网络,使用cpan命令是无法安装的,所以CPAN安装的速度是与网络有直接关系;当然我们可以选择一个快速的镜像站点来安装CPAN模块,那如何配置呢?
如果是第一次使用CPAN,那么执行cpan命令的时候,cpan命令会给出配置的友好提示,不过很多人都对这个友好提示的繁冗程度显得很不耐烦,不过新版本的CPAN模块已经改善了这一缺点;如果不是第一次使用CPAN,而以前别人配置的CPAN镜像站点出了问题不能下载,或镜像站点太慢等等修改一下配置信息,可以重新配置CPAN:
CPAN>o conf init
若不是root用户,使用cpan命令或perl -MCPAN -e shell也可以进行配置后安装:
首先,配置好CPAN配置,这个配置可以使用非root用户配置好,配置好的内容一般在$HOME/.cpan/CPAN/MyConfig.pm文件内;
配置文件MyConfig.pm中配置信息中确定有 'makepl_arg'=>q[PREFIX=~/perl] 这一行,~/perl为你当前用户有权限读、写和执行的目录;
最后,设置 PERL5LIB 环境变量,把 ~/perl 下的相关目录添加进 PERL5LIB。以 bash shell 为例,在 ~/.bash_profile 里添加如下即可:
export PERL5LIB=~/perl/lib:\
~/perl/lib/perl5/5.10.1/i386-linux-thread-multi:\
~/perl/lib/perl5/5.10.1:\
~/perl/lib/perl5/site_perl/5.10.1/i386-linux-thread-multi:\
~/perl/lib/perl5/site_perl/5.10.1:\
${PERL5LIB}
模块检测
运行
$perl -e 'use Module'
如果没有任何输出,则表示模块 Module 成功安装
打印模块版本
$perl -MModule -e 'print $Module::VERSION;'
注意事项:
使用 CPAN 安装模块有时候会 make test 一步失败。可到 $HOME/.cpan/build 的相应目录下直接 make install;
第一次安装 CPAN 时,可以先安装:
install Bundle::CPAN
或
install Bundle::CPANxxl?
这样以后的安装包安装就会少需要的依赖,建议安装。
cpan命令是随perl一起安装的一个perl脚本,它让我们从cpan那恶心的交互式中解脱出来;但它内部实现的功能主要还是调用CPAN.pm,和cpan交互式是一样的。几个常用选项如下:
-a:创建CPAN.pm的autobundle
-D module:查看模块的详细属性信息。例如是否安装,安装的版本号,最新的版本号,对应的模块路径,对应的源码包文件路径,谁维护的
-g module:下载最新版本的模块到当前目录
-i module:安装指定的模块
-j Config.pm:指定CPAN配置数据的文件
-J:以CPAN.pm相同的格式dump当前的配置文件
-O:列出过期的模块
-v:输出cpan脚本的版本号以及CPAN.pm的版本号
例如安装File::Util::Manual模块:
cpan -i File::Util::Manual
查看模块的信息:
cpan -D File::Utils
cpan -J对于了解和修改CPAN模块配置文件非常有帮助。
-------------------
CPANPLUS
默认的cpan命令安装时,如果依赖到其它包时,cpan不能自己解决,而需要手动去解它们之间的依赖关系;在初次使用cpan时,有回答很多问题。如果使用CPANPLUS的话,它能自动给依赖的模块安装好,在 Perl5.10 中现在默认有 CPANPLUS Shell。CPANPLUS提供了和CPAN.pm类似的功能,但特性更丰富。
装好CPANPLUS模块后,在终端里输入:cpanp 即可进入CPANPLUS环境。下载后就能直接使用,不需要任何其它的模块(当内 Perl 本身的 Module::Build,ExtUtils::MakeMaker 和 C Compiler 还是要,这个是系统就有的),有没有 Root 权限都不重要,非 root 会自动安装到当前用户的目录下。
包安装时取消安装测试(可选)
如果觉得每次测试太花时间,可以将测试取消:
# 取消安装过程中的测试:s conf skiptest 1
设置镜象:s reconfigure
选择镜象地址
选择7 Select mirrors
选择 No
选择 1 镜象
选择 3 Asia
选择 9 China
选择镜象地址,也一样按上面的数字,最后面一个是退出这个,记的退出时保存.
选择 9 Save and exit
# 取消提问回答是否按Y
s conf prereqs 1
s save #记的存一下
使用参考总结
1. CPANPLUS 中安装模块,按i:CPAN Terminal> i Bundle::CPAN
2. CPANPLUS 中删除模块,按u:CPAN Terminal> u YAML
3. CPANPLUS 中查找模块,按m:CPAN Terminal>m Smart::Comments
4. CPANPLUS 中查找作者的模块,按a:CPAN Terminal>a kai
5. CPANPLUS 中更新所有有新版本的模块,按下o:
CPAN Terminal> o
aliased 0.30 0.31 O/OV/OVID/aliased-0.31.tar.gz
Any::Moose 0.13 0.21 S/SA/SARTAK/Any-Moose-0.21.tar.gz
AnyEvent 7.02 7.04 M/ML/MLEHMANN/AnyEvent-7.04.tar.gz
AnyEvent::HTTP 2.14 2.15 M/ML/MLEHMANN/AnyEvent-HTTP-2.15.tar.gz
Apache2::Cookie 2.12 2.13 I/IS/ISAAC/libapreq2-2.13.tar.gz
......
6. 自我更新: CPAN Terminal>s selfupdate all
按x来更新包的索引缓存。
-------------------
CPANM
'cpanm'是一个新近出现的能与'cpanp'不相上下的包安装工具,这个工具能克服cpan的一系列缺点。
cpan App::cpanminus
cpanm的安装
1)、单文件安装
# wget https://raw.github.com/miyagawa/cpanminus/master/cpanm -O cpanm
2)、完整版本安装
# wget https://raw.github.com/miyagawa/cpanminus/master/cpanm -O /usr/local/bin/cpanm
# perl cpanm --self-upgrade --mirror http://mirrors.163.com/cpan
是在下载 cpanm 以后,直接用他来安装更新它自己,对应的模块名为:App::cpanminus。
cpanm的使用
使用方法很简单,命令行后直接跟包模块名即可,如:cpanm YAML::XS
这样它会从cpan镜像站上下载对应的tar包,后解压安装。至于它从哪里取得包,依据于当时的源设置,可以从本地磁盘上加载;它后面也可以跟包的url,如:'http://search.cpan.org/CPAN/authors/id/I/IN/INGY/YAML-LibYAML-0.41.tar.gz',它会下载后自动安装,如何对应的包有依赖,它会自动解决。
可以对它进行重新配置时指定相关源,相对于修改其配置文件,具体可参考:使用minicpan创建本地CPAN
也可以在当前shell环境里,指定别名:
alias cpanm='cpanm --mirror http://mirrors.163.com/cpan'
alias cpanm='cpanm --mirror /data/cpan/ --mirror-only'
Then to install any module from CPAN
cpanm Module::Name
The latest and greatest answer to this question is to use cpanm instead (also referred to as App::cpanminus or cpanminus)!
DESCRIPTION
cpanminus is a script to get, unpack, build and install modules from CPAN and does nothing else.
It's dependency free (can bootstrap itself), requires zero configuration, and stands alone. When running, it requires only 10MB of RAM.
To bootstrap install it:
curl -L http://cpanmin.us | perl - --sudo App::cpanminus
or if you are using perlbrew simply
perlbrew install-cpanm
From then on install modules by executing (as root if necessary)
cpanm Foo::Bar
-------------------
三者对比总结
CPAN是年代就为久远的,其成熟性和稳定性是不容置疑的,但同时它也有自身的缺点。
CPANPLUS是新出不久的,其特点是现代、智能、好用,与CPAN相同的是,它们都出现在'Core modules'中,估计以后打算用它做为CPAN的替代者。
cpanm也是初生牛犊,它具有与cpanplus相似的优点,但它更小巧、灵活,同时又不失其个性。
因此后两者是今后的主流,如何选择就要看个人喜好了。
-------------------
pm模块管理
1、删除模块
上面介绍了多种安装perl模块的方法,如果我想删除我机器上的模块,应该怎么操作呢,下面介绍一个新模块:'App::pmuninstall'
安装好后,会在PATH中生成一个命令行工具:pm-uninstall,使用它便可删除相应的模块。
使用很简单 $ pm-uninstall YAML::XS # 后跟模块的名字,任何你要删除的模块的名字都能加在其后
2、检查所有已安装的模块和版本
用于列出和检查本地已经安装的模块,查看具体版本信息,使用'App::cpanoutdated' 这个可以来实现:有那些可以更新,并会列出来,可以使用 cpanm或cpanp 来进行升级。
$ cpan-outdated --verbose --mirror file:///data/cpan/
我们可以将其结果作为参数传给 cpanm 来安装:
# cpan-outdated | cpanm
# cpan-outdated | xargs cpan -i
只需要安装'App::pmodinfo'这个模块就可以实现,其它相关参数如下:
-v –version
-f –full
-h –hash
-l,–local-modules
-u,–check-updates
# pmodinfo --full DBD::mysql
DBD::mysql version is 4.016.
cpan page : http://search.cpan.org/dist/DBD-mysql
filename : /usr/lib/perl5/DBD/mysql.pm
ctime : 2012-08-14 07:54:01
POD content: yes
Last cpan version: 4.022
当然除了pm-uninstall,cpan、cpanp、cpanm都带有卸载的功能。
-------------------
local::lib
默认情况下,安装的第三方模块都会和perl放在一起,而且对于那些非root用户,对某些目录没有写入权限,导致安装失败,只能sudo。可以使用local::lib,自定义安装路径。
首先安装这个模块,然后回到bash,可以查看这个模块导出的环境变量:
$ perl -Mlocal::lib
PATH="/home/freeoa/perl5/bin${PATH:+:${PATH}}"; export PATH;
PERL5LIB="/home/freeoa/perl5/lib/perl5${PERL5LIB:+:${PERL5LIB}}"; export PERL5LIB;
PERL_LOCAL_LIB_ROOT="/home/freeoa/perl5${PERL_LOCAL_LIB_ROOT:+:${PERL_LOCAL_LIB_ROOT}}"; export PERL_LOCAL_LIB_ROOT;
PERL_MB_OPT="--install_base \"/home/freeoa/perl5\""; export PERL_MB_OPT;
PERL_MM_OPT="INSTALL_BASE=/home/freeoa/perl5"; export PERL_MM_OPT;
local::lib正是借助于修改某些环境变量(注意其中的PERL5LIB)让它们脱离perl内置路径@INC,从而影响CPAN客户端安装的目录路径。
然后使用cpan客户端的-I开关,就表示根据local::lib的配置来安装(注:有些cpan客户端没有-I选项):
cpan -I Text::Levenshtein
如果使用cpanm,它比较聪明一点,如果你已经设置了local::lib,它会直接按照设定安装,如果没有设定,它会检查对默认的安装目录是否具有写权限,如果没有,就自动设置local::lib模块。所以,cpanm无需设置local::lib,但仍然可以显式指明使用local::lib来安装:
cpanm --local-lib HTML::Parser
如果仍然使用cpan客户端,指定安装路径。可以修改两个参数:
cpan[1]> o conf makepl_arg INSTALL_BASE=/home/freeoa/perl5
cpan[2]> o conf mbuild_arg "--install_base /home/freeoa/perl5"
cpan[3]> o conf commit
可以从man CPAN中获取这两个参数的解释:分别是传递给perl Makefile.PL和./Build的参数。也就是说通过设置这两个参数,无论是makefile格式的安装,还是build格式的安装,都会安装到给定目录下。
-------------------
CPAN模块的配置文件和配置建议
当第一次进入CPAN shell的时候,会让配置CPAN,可以选择让它自动配置。自动配置后,它会提示配置文件保存到了哪里。也可以在cpan交互式中使用mkmyconfig重新生成属于当前用户的配置文件,它会保存到~/.cpan/CPAN/MyConfig.pm,同时还会将local::lib的一些相关环境变量追加到~/.bashrc中。
进入cpan交互式shell,键入o conf即可输出当前的配置。内容项很多,有几项是建议修改的:
1.修改CPAN的源为网易的源
# 1.指定163的CPAN
o conf urllist push http://mirrors.163.com/CPAN/
# 2.提交,写入到磁盘配置文件
o conf commit
# 3.查看当前的CPAN源
o conf urllist
上面的push命令是将163的CPAN源推到urllist的数组最后一个位置(key是urllist,value是一个由url组成的数组),还可以使用pop移除数组最后一个元素,使用shift移除数组第一个元素,使用unshift推到数组的第一个元素。如果不给这几个命令,直接给url,则替换整个数组。
如果想清空urllist,可以使用o conf init urllist。
2.修改make和build的执行方式,加上sudo。这主要是针对非root用户的
o conf make_install_make_command 'sudo /usr/bin/make'
o conf mbuild_install_build_command 'sudo ./Build'
3.指定安装路径。这主要是针对非root用户的
cpan[1]> o conf makepl_arg INSTALL_BASE=/home/freeoa/perl5
cpan[2]> o conf mbuild_arg "--install_base /home/freeoa/perl5"
4.配置自动提交
o conf auto_commit 1
5.配置依赖策略
o conf prerequisites_policy follow
除了上面几项,使用cpan时,还建议更新和安装以下几个模块(Linux可以通过操作的软件包来进行安装,可能版本稍旧):
install CPAN ExtUtils::MakeMaker Module::Build Bundle::CPAN
安装这几个模块可以解决很多不必要的麻烦。
可以借助perldoc 'MODULE_NAME'来间接查询一个模块是否已安装,如果安装了就能正常输出对应的文档,如果没有安装,则报错。如果想要查看所有已安装的module,则使用cpan -a,不过第一次使用它会要求你先进行一番配置,不过一般来说,选择让它自动配置即可。模块实际上都是perl脚本。在perl文化中,非常注重模块的开发人员以及维护人员。在每个模块相关的元数据属性中,都会记录他们的信息。以下是一个模块基本具备的信息:
Module id = File::Utils
CPAN_USERID PEKINGSAM (Yan Xueqing <yanxueqing10@163.com>)
CPAN_VERSION 0.000005
CPAN_FILE P/PE/PEKINGSAM/File-Utils-0.0.5.tar.gz
UPLOAD_DATE 2016-05-11
MANPAGE File::Utils - Provide various of file operation
INST_FILE /usr/local/share/perl5/File/Utils.pm
INST_VERSION 0.0.5
Module ID:模块ID,也就是模块的名称,即File::Utils
CPAN_USERID:上传这个模块的人在CPAN中的ID,后面是它的注册名和邮箱。从邮箱和名称来看,显然这是个中国人
CPAN_VERSION:这个模块的版本号
CPAN_FILE:这个模块的完整ID,这个ID称为Distribution id。这个ID由4部分组成:
第3部分是这个模块的上传者ID
第1部分是这个上传者ID的第一个字母
第2部分是上传者ID的前两个字母
第4部分是模块的源码包名称
UPLOAD_DATA:模块的上传时间
MANPAGE:man文档,可以通过man File::Utils获取该模块的帮助信息
INST_FILE:模块安装路径,如果没有安装该模块,则显示not installed
INST_VERSION:已安装的该模块版本号
通过Distribution id,可以直接推断出这个文件的URL。以网易的CPAN源镜像(http://mirrors.163.com/cpan/)为例,那么这个模块包的URL为:http://mirrors.163.com/cpan/authors/id/P/PE/PEKINGSAM/File-Utils-0.0.5.tar.gz。
有些工具需要指定Distribution id,4个部分毕竟比较复杂,其实可以指定后两个部分,一般来说可以自动补齐前两部分。
另外CPAN安装模块时,依赖于make编译工具,所以必须先安装好make。更简易安装好整个开发包可参考:Linux上安装Build Essentials。
手动编译安装模块
从网上下载好模块源码包,解压完成后进入源码包目录:
wget https://cpan.metacpan.org/authors/id/X/XS/XSAWYERX/Data-Dumper-2.172.tar.gz
tar xf Data-Dumper-2.172.tar.gz
cd Data-Dumper-2.172/
然后看看这个目录下,存在的文件是Makefile.PL还是Build.PL,这两种文件都可以用来编译安装,如果同时存在,则随便选择一种即可。
如果是Makefile.PL,所以安装:
perl Makefile.PL
make
make install
如果想要指定安装路径,则加上INSTALL_BASE即可:
perl Makefile.PL INSTALL_BASE=/home/perlapps
如果是Build.PL,则:
perl Build.PL
./Build
./Build install
如果想要指定安装路径,则加上perl Build.PL −−install_base /home/perlapps
如果是手动指定的安装路径,还需要设置模块查找路径环境变量:
export PERL5LIB=/home/perlapps
或者在perl程序内部,指定查找路径:
#!/usr/bin/perl
use lib qw(/home/perlapps);
手动编译安装时,很可能会因为额外的库依赖问题而导致编译中断。一般来说,对于提示缺少的库文件名$foo来说,Debian/Ubuntu上对应的库文件包是lib$foo-dev或$foo-dev,redhat系列上则是lib$foo-devel,使用包管理工具大致搜索一下即可。
-------------------
CPAN
cpan命令
cpan命令其实也是一个perl脚本,对于不同版本的perl,可能cpan命令的功能强弱有所不同;执行cpan,我们进入了一个类似bash的界面,暂且叫做cpanshell,cpanshell上可以像bash一样输入命令,这个命令是CPAN所特有的,我们一般常用到的cpan命令主要有:
help
help命令是显示帮助信息,这里面包含了所有的cpan命令,虽然看上去只有一屏,但功能确是非常强大。
m //
这个是一个模式,用来查找perl模块,有点像perl正则里面的m//,用于匹配(match),但这里m与//之间多了一个空格,且这里的m指'modules',意思是根据模块名称查找,//内可以使用正则; 同理a(authors)、b(bundles)、d(distributions)和i(in all)都有这种模式。
install
install命令是安装perl模块,一般是接模块名称,而不是压缩包名字。比如DBD::mysql,而不是DBD-mysql,即
install DBD::mysql
CPAN配置
CPAN安装是网络安装,如果没有网络,使用cpan命令是无法安装的,所以CPAN安装的速度是与网络有直接关系;当然我们可以选择一个快速的镜像站点来安装CPAN模块,那如何配置呢?
如果是第一次使用CPAN,那么执行cpan命令的时候,cpan命令会给出配置的友好提示,不过很多人都对这个友好提示的繁冗程度显得很不耐烦,不过新版本的CPAN模块已经改善了这一缺点;如果不是第一次使用CPAN,而以前别人配置的CPAN镜像站点出了问题不能下载,或镜像站点太慢等等修改一下配置信息,可以重新配置CPAN:
CPAN>o conf init
若不是root用户,使用cpan命令或perl -MCPAN -e shell也可以进行配置后安装:
首先,配置好CPAN配置,这个配置可以使用非root用户配置好,配置好的内容一般在$HOME/.cpan/CPAN/MyConfig.pm文件内;
配置文件MyConfig.pm中配置信息中确定有 'makepl_arg'=>q[PREFIX=~/perl] 这一行,~/perl为你当前用户有权限读、写和执行的目录;
最后,设置 PERL5LIB 环境变量,把 ~/perl 下的相关目录添加进 PERL5LIB。以 bash shell 为例,在 ~/.bash_profile 里添加如下即可:
export PERL5LIB=~/perl/lib:\
~/perl/lib/perl5/5.10.1/i386-linux-thread-multi:\
~/perl/lib/perl5/5.10.1:\
~/perl/lib/perl5/site_perl/5.10.1/i386-linux-thread-multi:\
~/perl/lib/perl5/site_perl/5.10.1:\
${PERL5LIB}
模块检测
运行
$perl -e 'use Module'
如果没有任何输出,则表示模块 Module 成功安装
打印模块版本
$perl -MModule -e 'print $Module::VERSION;'
注意事项:
使用 CPAN 安装模块有时候会 make test 一步失败。可到 $HOME/.cpan/build 的相应目录下直接 make install;
第一次安装 CPAN 时,可以先安装:
install Bundle::CPAN
或
install Bundle::CPANxxl?
这样以后的安装包安装就会少需要的依赖,建议安装。
cpan命令是随perl一起安装的一个perl脚本,它让我们从cpan那恶心的交互式中解脱出来;但它内部实现的功能主要还是调用CPAN.pm,和cpan交互式是一样的。几个常用选项如下:
-a:创建CPAN.pm的autobundle
-D module:查看模块的详细属性信息。例如是否安装,安装的版本号,最新的版本号,对应的模块路径,对应的源码包文件路径,谁维护的
-g module:下载最新版本的模块到当前目录
-i module:安装指定的模块
-j Config.pm:指定CPAN配置数据的文件
-J:以CPAN.pm相同的格式dump当前的配置文件
-O:列出过期的模块
-v:输出cpan脚本的版本号以及CPAN.pm的版本号
例如安装File::Util::Manual模块:
cpan -i File::Util::Manual
查看模块的信息:
cpan -D File::Utils
cpan -J对于了解和修改CPAN模块配置文件非常有帮助。
-------------------
CPANPLUS
默认的cpan命令安装时,如果依赖到其它包时,cpan不能自己解决,而需要手动去解它们之间的依赖关系;在初次使用cpan时,有回答很多问题。如果使用CPANPLUS的话,它能自动给依赖的模块安装好,在 Perl5.10 中现在默认有 CPANPLUS Shell。CPANPLUS提供了和CPAN.pm类似的功能,但特性更丰富。
装好CPANPLUS模块后,在终端里输入:cpanp 即可进入CPANPLUS环境。下载后就能直接使用,不需要任何其它的模块(当内 Perl 本身的 Module::Build,ExtUtils::MakeMaker 和 C Compiler 还是要,这个是系统就有的),有没有 Root 权限都不重要,非 root 会自动安装到当前用户的目录下。
包安装时取消安装测试(可选)
如果觉得每次测试太花时间,可以将测试取消:
# 取消安装过程中的测试:s conf skiptest 1
设置镜象:s reconfigure
选择镜象地址
选择7 Select mirrors
选择 No
选择 1 镜象
选择 3 Asia
选择 9 China
选择镜象地址,也一样按上面的数字,最后面一个是退出这个,记的退出时保存.
选择 9 Save and exit
# 取消提问回答是否按Y
s conf prereqs 1
s save #记的存一下
使用参考总结
1. CPANPLUS 中安装模块,按i:CPAN Terminal> i Bundle::CPAN
2. CPANPLUS 中删除模块,按u:CPAN Terminal> u YAML
3. CPANPLUS 中查找模块,按m:CPAN Terminal>m Smart::Comments
4. CPANPLUS 中查找作者的模块,按a:CPAN Terminal>a kai
5. CPANPLUS 中更新所有有新版本的模块,按下o:
CPAN Terminal> o
aliased 0.30 0.31 O/OV/OVID/aliased-0.31.tar.gz
Any::Moose 0.13 0.21 S/SA/SARTAK/Any-Moose-0.21.tar.gz
AnyEvent 7.02 7.04 M/ML/MLEHMANN/AnyEvent-7.04.tar.gz
AnyEvent::HTTP 2.14 2.15 M/ML/MLEHMANN/AnyEvent-HTTP-2.15.tar.gz
Apache2::Cookie 2.12 2.13 I/IS/ISAAC/libapreq2-2.13.tar.gz
......
6. 自我更新: CPAN Terminal>s selfupdate all
按x来更新包的索引缓存。
-------------------
CPANM
'cpanm'是一个新近出现的能与'cpanp'不相上下的包安装工具,这个工具能克服cpan的一系列缺点。
cpan App::cpanminus
cpanm的安装
1)、单文件安装
# wget https://raw.github.com/miyagawa/cpanminus/master/cpanm -O cpanm
2)、完整版本安装
# wget https://raw.github.com/miyagawa/cpanminus/master/cpanm -O /usr/local/bin/cpanm
# perl cpanm --self-upgrade --mirror http://mirrors.163.com/cpan
是在下载 cpanm 以后,直接用他来安装更新它自己,对应的模块名为:App::cpanminus。
cpanm的使用
使用方法很简单,命令行后直接跟包模块名即可,如:cpanm YAML::XS
这样它会从cpan镜像站上下载对应的tar包,后解压安装。至于它从哪里取得包,依据于当时的源设置,可以从本地磁盘上加载;它后面也可以跟包的url,如:'http://search.cpan.org/CPAN/authors/id/I/IN/INGY/YAML-LibYAML-0.41.tar.gz',它会下载后自动安装,如何对应的包有依赖,它会自动解决。
可以对它进行重新配置时指定相关源,相对于修改其配置文件,具体可参考:使用minicpan创建本地CPAN
也可以在当前shell环境里,指定别名:
alias cpanm='cpanm --mirror http://mirrors.163.com/cpan'
alias cpanm='cpanm --mirror /data/cpan/ --mirror-only'
Then to install any module from CPAN
cpanm Module::Name
The latest and greatest answer to this question is to use cpanm instead (also referred to as App::cpanminus or cpanminus)!
DESCRIPTION
cpanminus is a script to get, unpack, build and install modules from CPAN and does nothing else.
It's dependency free (can bootstrap itself), requires zero configuration, and stands alone. When running, it requires only 10MB of RAM.
To bootstrap install it:
curl -L http://cpanmin.us | perl - --sudo App::cpanminus
or if you are using perlbrew simply
perlbrew install-cpanm
From then on install modules by executing (as root if necessary)
cpanm Foo::Bar
-------------------
三者对比总结
CPAN是年代就为久远的,其成熟性和稳定性是不容置疑的,但同时它也有自身的缺点。
CPANPLUS是新出不久的,其特点是现代、智能、好用,与CPAN相同的是,它们都出现在'Core modules'中,估计以后打算用它做为CPAN的替代者。
cpanm也是初生牛犊,它具有与cpanplus相似的优点,但它更小巧、灵活,同时又不失其个性。
因此后两者是今后的主流,如何选择就要看个人喜好了。
-------------------
pm模块管理
1、删除模块
上面介绍了多种安装perl模块的方法,如果我想删除我机器上的模块,应该怎么操作呢,下面介绍一个新模块:'App::pmuninstall'
安装好后,会在PATH中生成一个命令行工具:pm-uninstall,使用它便可删除相应的模块。
使用很简单 $ pm-uninstall YAML::XS # 后跟模块的名字,任何你要删除的模块的名字都能加在其后
2、检查所有已安装的模块和版本
用于列出和检查本地已经安装的模块,查看具体版本信息,使用'App::cpanoutdated' 这个可以来实现:有那些可以更新,并会列出来,可以使用 cpanm或cpanp 来进行升级。
$ cpan-outdated --verbose --mirror file:///data/cpan/
我们可以将其结果作为参数传给 cpanm 来安装:
# cpan-outdated | cpanm
# cpan-outdated | xargs cpan -i
更多关于查看系统中perl模块安装情况时,可参考文章: 查看Perl模块安装路径的"查看系统中已经安装的Perl模块"段落。
3、查看具体模块的相关信息(安装位置、版本等)只需要安装'App::pmodinfo'这个模块就可以实现,其它相关参数如下:
-v –version
-f –full
-h –hash
-l,–local-modules
-u,–check-updates
# pmodinfo --full DBD::mysql
DBD::mysql version is 4.016.
cpan page : http://search.cpan.org/dist/DBD-mysql
filename : /usr/lib/perl5/DBD/mysql.pm
ctime : 2012-08-14 07:54:01
POD content: yes
Last cpan version: 4.022
当然除了pm-uninstall,cpan、cpanp、cpanm都带有卸载的功能。
-------------------
local::lib
默认情况下,安装的第三方模块都会和perl放在一起,而且对于那些非root用户,对某些目录没有写入权限,导致安装失败,只能sudo。可以使用local::lib,自定义安装路径。
首先安装这个模块,然后回到bash,可以查看这个模块导出的环境变量:
$ perl -Mlocal::lib
PATH="/home/freeoa/perl5/bin${PATH:+:${PATH}}"; export PATH;
PERL5LIB="/home/freeoa/perl5/lib/perl5${PERL5LIB:+:${PERL5LIB}}"; export PERL5LIB;
PERL_LOCAL_LIB_ROOT="/home/freeoa/perl5${PERL_LOCAL_LIB_ROOT:+:${PERL_LOCAL_LIB_ROOT}}"; export PERL_LOCAL_LIB_ROOT;
PERL_MB_OPT="--install_base \"/home/freeoa/perl5\""; export PERL_MB_OPT;
PERL_MM_OPT="INSTALL_BASE=/home/freeoa/perl5"; export PERL_MM_OPT;
local::lib正是借助于修改某些环境变量(注意其中的PERL5LIB)让它们脱离perl内置路径@INC,从而影响CPAN客户端安装的目录路径。
然后使用cpan客户端的-I开关,就表示根据local::lib的配置来安装(注:有些cpan客户端没有-I选项):
cpan -I Text::Levenshtein
如果使用cpanm,它比较聪明一点,如果你已经设置了local::lib,它会直接按照设定安装,如果没有设定,它会检查对默认的安装目录是否具有写权限,如果没有,就自动设置local::lib模块。所以,cpanm无需设置local::lib,但仍然可以显式指明使用local::lib来安装:
cpanm --local-lib HTML::Parser
如果仍然使用cpan客户端,指定安装路径。可以修改两个参数:
cpan[1]> o conf makepl_arg INSTALL_BASE=/home/freeoa/perl5
cpan[2]> o conf mbuild_arg "--install_base /home/freeoa/perl5"
cpan[3]> o conf commit
可以从man CPAN中获取这两个参数的解释:分别是传递给perl Makefile.PL和./Build的参数。也就是说通过设置这两个参数,无论是makefile格式的安装,还是build格式的安装,都会安装到给定目录下。
-------------------
CPAN模块的配置文件和配置建议
当第一次进入CPAN shell的时候,会让配置CPAN,可以选择让它自动配置。自动配置后,它会提示配置文件保存到了哪里。也可以在cpan交互式中使用mkmyconfig重新生成属于当前用户的配置文件,它会保存到~/.cpan/CPAN/MyConfig.pm,同时还会将local::lib的一些相关环境变量追加到~/.bashrc中。
进入cpan交互式shell,键入o conf即可输出当前的配置。内容项很多,有几项是建议修改的:
1.修改CPAN的源为网易的源
# 1.指定163的CPAN
o conf urllist push http://mirrors.163.com/CPAN/
# 2.提交,写入到磁盘配置文件
o conf commit
# 3.查看当前的CPAN源
o conf urllist
上面的push命令是将163的CPAN源推到urllist的数组最后一个位置(key是urllist,value是一个由url组成的数组),还可以使用pop移除数组最后一个元素,使用shift移除数组第一个元素,使用unshift推到数组的第一个元素。如果不给这几个命令,直接给url,则替换整个数组。
如果想清空urllist,可以使用o conf init urllist。
2.修改make和build的执行方式,加上sudo。这主要是针对非root用户的
o conf make_install_make_command 'sudo /usr/bin/make'
o conf mbuild_install_build_command 'sudo ./Build'
3.指定安装路径。这主要是针对非root用户的
cpan[1]> o conf makepl_arg INSTALL_BASE=/home/freeoa/perl5
cpan[2]> o conf mbuild_arg "--install_base /home/freeoa/perl5"
4.配置自动提交
o conf auto_commit 1
5.配置依赖策略
o conf prerequisites_policy follow
除了上面几项,使用cpan时,还建议更新和安装以下几个模块(Linux可以通过操作的软件包来进行安装,可能版本稍旧):
install CPAN ExtUtils::MakeMaker Module::Build Bundle::CPAN
安装这几个模块可以解决很多不必要的麻烦。
该文章最后由 阿炯 于 2023-11-07 17:24:11 更新,目前是第 2 版。