Perl模塊管理


Perl模塊管理

perl有自帶的模塊,還有第三方模塊。自帶的模塊是隨perl安裝而安裝好的,第三方模塊需要從CPAN(Comprehensive Perl Archive Network)上下載並安裝,可以從https://metacpan.org中查找所需第三方模塊。

可以借助perldoc 'MODULE_NAME'來間接查詢一個模塊是否已安裝,如果安裝了就能正常輸出對應的文檔,如果沒有安裝,則報錯。

如果想要查看所有已安裝的module,則使用cpan -a,不過第一次使用它會要求你先進行一番配置,不過一般來說,選擇讓它自動配置即可。

例如,篩選出已安裝的包含CGI字符的模塊。第一個字段是字段名,第二個字段是已安裝版本號,第三個字段是可獲取的最新版本號,第四個字段是在CPAN中的位置,這個位置,稍后解釋。

[root@redisa-b ~]# cpan -a | grep CGI
CGI             3.63  4.40  LEEJO/CGI-4.40.tar.gz
CGI::Fast       1.09  2.13  LEEJO/CGI-Fast-2.13.tar.gz
FCGI            0.74  0.78  ETHER/FCGI-0.78.tar.gz
CGI::Carp       3.51  4.40  LEEJO/CGI-4.40.tar.gz
CGI::Cookie     1.30  4.40  LEEJO/CGI-4.40.tar.gz
CGI::Pretty     3.46  4.40  LEEJO/CGI-4.40.tar.gz
CGI::Push       1.05  4.40  LEEJO/CGI-4.40.tar.gz
CGI::Util       3.62  4.40  LEEJO/CGI-4.40.tar.gz

全面了解推薦內容:

模塊必知常識

模塊實際上都是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.aliyun.com/CPAN/)為例,那么這個模塊包的URL為:http://mirrors.aliyun.com/CPAN/authors/id/P/PE/PEKINGSAM/File-Utils-0.0.5.tar.gz

有些工具需要我們指定Distribution id,4個部分畢竟比較復雜,其實可以指定后兩個部分,一般來說可以自動補齊前兩部分。

另外,CPAN安裝模塊時,依賴於make工具,所以必須先安裝好make。更簡易安裝好整個開發包。

yum -y install make

手動編譯安裝模塊

例如,網上搜索到了Data::Dumper模塊,想要手動安裝它。

從網上下載好模塊源碼包,然后解壓,進入源碼包目錄:

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,這兩種文件都可以用來編譯安裝,如果同時存在,則隨便選擇一種即可。

[root@redisa-b Data-Dumper-2.172]# ls -l
total 336
-rw-r--r-- 1 privoxy privoxy  11559 Sep 19 22:36 Changes
-rw-r--r-- 1 privoxy privoxy  45832 Sep 19 22:36 Dumper.pm
-rw-r--r-- 1 privoxy privoxy  51342 Sep 19 22:36 Dumper.xs
-rw-r--r-- 1 privoxy privoxy   1583 Sep 19 22:36 Makefile.PL
-rw-r--r-- 1 privoxy privoxy    618 Sep 19 22:36 MANIFEST
-rw-r--r-- 1 privoxy privoxy    418 Sep 19 22:36 MANIFEST.SKIP
-rw-r--r-- 1 privoxy privoxy    863 Sep 19 22:36 META.json
-rw-r--r-- 1 privoxy privoxy    548 Sep 19 22:36 META.yml
-rw-r--r-- 1 privoxy privoxy 200069 Sep 19 22:36 ppport.h
drwxr-xr-x 3 privoxy privoxy   4096 Sep 19 22:36 t
-rw-r--r-- 1 privoxy privoxy    768 Sep 19 22:36 Todo

上面的是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 shell

手動安裝模塊畢竟不方便。perl自身的CPAN模塊提供的shell可以讓我們快速安裝模塊。

perl -MCPAN -e "shell"

它將會進入cpan的交互式shell模式。在這個交互式模式下,可以執行很多操作。例如安裝模塊、下載模塊、按照正則查找模塊、查找某個作者的模塊、升級模塊、列出最近上傳到CPAN的模塊等等。

cpan下能執行的命令,可以通過h鍵來獲取幫助:

cpan[8]> h

Display Information                                                (ver 1.9800)
 command  argument          description
 a,b,d,m  WORD or /REGEXP/  about authors, bundles, distributions, modules
 i        WORD or /REGEXP/  about any of the above
 ls       AUTHOR or GLOB    about files in the author's directory
    (with WORD being a module, bundle or author name or a distribution
    name of the form AUTHOR/DISTRIBUTION)

Download, Test, Make, Install...
 get      download                     clean    make clean
 make     make (implies get)           look     open subshell in dist directory
 test     make test (implies make)     readme   display these README files
 install  make install (implies test)  perldoc  display POD documentation

Upgrade
 r        WORDs or /REGEXP/ or NONE    report updates for some/matching/all modules
 upgrade  WORDs or /REGEXP/ or NONE    upgrade some/matching/all modules

Pragmas
 force  CMD    try hard to do command  fforce CMD    try harder
 notest CMD    skip testing

Other
 h,?           display this menu       ! perl-code   eval a perl command
 o conf [opt]  set and query options   q             quit the cpan shell
 reload cpan   load CPAN.pm again      reload index  load newer indices
 autobundle    Snapshot                recent        latest CPAN uploads

例如,通過m命令或者i命令按正則表達式查找包含"File::Util"字符的模塊:

cpan[11]> m /^File::Util*/
Module  < File::Util             (TOMMY/File-Util-4.161950.tar.gz)
Module  < File::Util::Cookbook   (TOMMY/File-Util-4.132140.tar.gz)
Module  < File::Util::Definitions (TOMMY/File-Util-4.161950.tar.gz)
Module  < File::Util::Exception  (TOMMY/File-Util-4.161950.tar.gz)
Module  < File::Util::Exception::Diagnostic (TOMMY/File-Util-4.161950.tar.gz)
Module  < File::Util::Exception::Standard (TOMMY/File-Util-4.161950.tar.gz)
Module  < File::Util::Interface::Classic (TOMMY/File-Util-4.161950.tar.gz)
Module  < File::Util::Interface::Modern (TOMMY/File-Util-4.161950.tar.gz)
Module  < File::Util::Manual     (TOMMY/File-Util-4.132140.tar.gz)
Module  < File::Util::Manual::Examples (TOMMY/File-Util-4.132140.tar.gz)
Module  < File::Util::Tempdir    (PERLANCAR/File-Util-Tempdir-0.030.tar.gz)
Module  < File::Utils            (PEKINGSAM/File-Utils-0.0.5.tar.gz)

這里列出來的模塊版本可能會比CPAN網頁上列出的版本更低一些。

使用過程中,按鍵可能會非常不好用。如果需要刪除某個已鍵入的字符,需要同時按住ctrl+back按鍵。

例如,安裝File::Util模塊:

cpan[12]> install File::Utils

還可以安裝網上下載的perl模塊源碼包,甚至get命令可以直接下載源碼包。例如,安裝File::Rename模塊,它的源碼包地址為https://cpan.metacpan.org/authors/id/R/RM/RMBARKER/File-Rename-1.09_02.tar.gz

cpan[8]> get RMBARKER/File-Rename-1.09_02.tar.gz

下載成功后,它會提示保存的路徑:

Checksum for /root/.cpan/sources/authors/id/R/RM/RMBARKER/File-Rename-1.09_02.tar.gz ok

然后用install命令安裝這個模塊源碼包即可:

cpan[9]> install RMBARKER/File-Rename-1.09_02.tar.gz

這里的distribution id既可以加上前兩部分,也可以省略前兩部分。

默認安裝一個模塊時需要make test,但是有些模塊需要test非常常的時間,比如安裝CPANPLUS模塊時的依賴模塊File::Fetch,它有可能會test非常長的時間,這時候可以CTRL+C退出,再次安裝時跳過test階段。

cpan[10]> notest install CPANPLUS

如果想要配置CPAN,需要使用o conf,這個命令很關鍵,關於配置的信息非常多,此處只介紹下修改CPAN源的方法。例如修改CPAN的源為阿里雲的源:

# 1.指定aliyun的CPAN
o conf urllist push https://mirrors.aliyun.com/CPAN/

# 2.提交,寫入到磁盤配置文件
o conf commit

# 3.查看當前的CPAN源
o conf urllist

關於cpan交互式,以及o conf以及CPAN模塊的配置文件,可以man CPAN獲取更多用法。

另外注意,在perl程序代碼中,可以通過CPAN::Shell->COMMAND("arguments");實現和交互式模式下一樣的操作:

例如,在perl程序代碼中安裝模塊:

#!/usr/bin/perl

use CPAN;
CPAN::Shell->install("Acme::Meta");
CPAN::Shell->install("NWCLARK/Acme-Meta-0.02.tar.gz");

CPAN客戶端:cpan命令(腳本)

cpan命令是隨perl一起安裝的一個perl腳本,它讓我們從cpan那惡心的交互式中解脫出來。但它內部實現的功能主要還是調用CPAN.pm,和cpan交互式是一樣的。

大概看幾個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

查看模塊的信息:

[root@redisa-b ~]# cpan -D File::Utils
Reading '/root/.cpan/Metadata'
  Database was generated on Wed, 19 Sep 2018 20:17:03 GMT
File::Utils
-------------------------------------------------------------------------
        (no description)
        P/PE/PEKINGSAM/File-Utils-0.0.5.tar.gz     # 模塊的distribution id
        /usr/local/share/perl5/File/Utils.pm       # 模塊的安裝路徑
        Installed: 0.0.5                           # 已安裝的模塊版本號
        CPAN:      0.000005  up to date            # CPAN中最新的模塊版本號
        Yan Xueqing (PEKINGSAM)                    # 作者名稱及CPAN中的ID
        yanxueqing10@163.com

cpan -J對於了解和修改CPAN模塊配置文件非常有幫助,可以執行一下試試看。

CPAN客戶端:CPANPLUS模塊

CPANPLUS提供了和CPAN.pm類似的功能,但特性更豐富。

首先,安裝它:

cpan[20]> notest install CPANPLUS

cpanp命令可以進入交互式,也可以使用命令行模式,命令行模式功能也很豐富。不過用法都很簡單,和cpan都類似,可以cpanp -h大致看一下。

例如,安裝MongoDB模塊:

cpanp -i MongoDB

卸載MongoDB模塊:

cpanp -u MongoDB

CPAN客戶端:cpanm

這個是真正的完全一鍵安裝,無需任何配置。而且,它沒有交互式模式。

首先,安裝這個工具所在cpanminus模塊。:

install App::cpanminus

選項和用法很簡單,可以cpanm -h去瞧一瞧。

要安裝某個模塊:

cpanm File::Utils

默認情況下,它搜索的CPAN源是http://www.cpan.org/,可以指定CPAN源:

cpanm --mirrors http://mirrors.aliyun.com/CPAN File::Utils

卸載模塊

要卸載一個模塊,可以安裝pmuninstall模塊,它提供pm-uninstall命令,可以快速卸載模塊。

cpan App::pmuninstall

例如,卸載MongoDB模塊:

pm-uninstall MongoDB

默認會給出提示,是否要確認卸載。可以指定"-f"選項強制卸載,無需交互式提示:

pm-uninstall -f MongoDB

當然,除了pm-uninstall,cpan、cpanp、cpanm都帶有卸載的功能。

local::lib

默認情況下,安裝的第三方模塊都會和perl放在一起,而且對於那些非root用戶,對某些目錄沒有寫入權限,導致安裝失敗,只能sudo。可以使用local::lib,自定義安裝路徑。

首先,安裝這個模塊:

cpan[9]> install local::lib

然后回到bash,可以查看這個模塊導出的環境變量:

$ perl -Mlocal::lib
PATH="/home/fairy/perl5/bin${PATH:+:${PATH}}"; export PATH;
PERL5LIB="/home/fairy/perl5/lib/perl5${PERL5LIB:+:${PERL5LIB}}"; export PERL5LIB;
PERL_LOCAL_LIB_ROOT="/home/fairy/perl5${PERL_LOCAL_LIB_ROOT:+:${PERL_LOCAL_LIB_ROOT}}"; export PERL_LOCAL_LIB_ROOT;
PERL_MB_OPT="--install_base \"/home/fairy/perl5\""; export PERL_MB_OPT;
PERL_MM_OPT="INSTALL_BASE=/home/fairy/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/fairy/perl5
cpan[2]> o conf mbuild_arg "--install_base /home/fairy/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.指定aliyun的CPAN
o conf urllist push https://mirrors.aliyun.com/CPAN/

# 2.提交,寫入到磁盤配置文件
o conf commit

# 3.查看當前的CPAN源
o conf urllist

上面的push命令是將aliyun的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/fairy/perl5
cpan[2]> o conf mbuild_arg "--install_base /home/fairy/perl5"

4.配置自動提交

o conf auto_commit 1

5.配置依賴策略

o conf prerequisites_policy follow

除了上面幾項,使用cpan時,還建議更新和安裝以下幾個模塊:

install CPAN ExtUtils::MakeMaker Module::Build Bundle::CPAN

安裝這幾個模塊可以解決很多不必要的麻煩。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM