[精讚] [會員登入]
2752

[PERL] 使用CPAN安裝模組

在Linux 上,CPAN 可以用來安裝或管理 perl 的模組,此文教你怎麼做。

此文完整連結 http://n.sfs.tw/10322

複製連結 [PERL] 使用CPAN安裝模組@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2019-01-16 01:51:17 最後編修
2016-11-29 15:35:39 By 張○○
 

在Linux 上,CPAN 可以用來安裝或管理 perl 的模組

1. 安裝CPAN shell

# yum install gcc* perl-CPAN

 

2. 進入CPAN Shell

# perl -MCPAN -e shell

第一次進入需要進行一些基本設定

# perl -MCPAN -e shell

CPAN.pm requires configuration, but most of it can be done automatically.
If you answer 'no' below, you will enter an interactive dialog for each
configuration option instead.

Would you like to configure as much as possible automatically? [yes] 你要不要進行自動設定?按ENTER

 <install_help>

Warning: You do not have write permission for Perl library directories.

To install modules, you need to configure a local Perl library directory or
escalate your privileges.  CPAN can help you by bootstrapping the local::lib
module or by configuring itself to use 'sudo' (if available).  You may also
resolve this problem manually if you need to customize your setup.

你要用什麼方法管理你的套件?按ENTER。內建的 local::lib可以讓你不需要root的權限就能安授
What approach do you want?  (Choose 'local::lib', 'sudo' or 'manual')
 [local::lib]

Autoconfigured everything but 'urllist'.

Now you need to choose your CPAN mirror sites.  You can let me
pick mirrors for you, you can select them from a list or you
can enter them by hand.

Would you like me to automatically choose some CPAN mirror
sites for you? (This means connecting to the Internet) [yes] 你要自動選擇CPAN 的映射站嗎?按ENTER

Trying to fetch a mirror list from the Internet
Fetching with HTTP::Tiny:
http://www.perl.org/CPAN/MIRRORED.BY

Looking for CPAN mirrors near you (please be patient)
........................... done!

安裝中…

export PERL_LOCAL_LIB_ROOT="$PERL_LOCAL_LIB_ROOT:/root/perl5";
export PERL_MB_OPT="--install_base /root/perl5";
export PERL_MM_OPT="INSTALL_BASE=/root/perl5";
export PERL5LIB="/root/perl5/lib/perl5:$PERL5LIB";
export PATH="/root/perl5/bin:$PATH";

Would you like me to append that to /root/.bashrc now? [yes] 你要把這些設定加到/root/.bashrc 嗎?按ENTER

commit: wrote '/root/.cpan/CPAN/MyConfig.pm'

You can re-run configuration any time with 'o conf init' in the CPAN shell
Terminal does not support AddHistory.

cpan shell -- CPAN exploration and modules installation (v1.9800)
Enter 'h' for help.

cpan[1]>

安裝模組只要在cpan shell 下打入 install xxx::yyy,例如安裝 Net::IPv4Addr 模組
cpan> install Net::IPv4Addr

要安裝 threads 模組
cpan> install threads

在測試模組是否能安裝,使用指令test:

cpan> test DBI

要強制安裝套件-- 有時安裝前會執行檢查,檢查 不過時不給裝,這時可以「硬裝」,個人經驗是硬裝裝完有時程式執行會出錯,找不到原因,所以儘量少用這種方法,硬裝的方法是在 install 前加上 'force'。

cpan> force install Net::DNS

 

直接使用 cpan 指令安裝

# cpan -i CGI
# cpan -i Digest::MD5
# cpan -i Math::Calc::Units

 

3. 檢查參數或修改參數

如果要檢查或修改參數,使用 o 這個指令
cpan> o conf

未設定 make 參數安裝會出錯,設定make 的路徑參數

cpan> o conf make /usr/bin/make
make    /usr/bin/make

 

4. CPAN 臨時目錄及常見錯誤

4.1 CPAN 統會將檔案下載置於 /root/.cpan/build/xxx

xxx是套件名稱

4.2 假如出現 Is already unwrapped into director 的錯誤,例如安裝 threads 時:

cpan> install threads
Running install for module threads
Running make for J/JD/JDHEDDEN/threads-1.77.tar.gz
  Is already unwrapped into directory /root/.cpan/build/threads-1.77
  Makefile.PL returned status 512

只要把 /root/.cpan remove 即可

4.3 新裝的系統如果出現 No 'C' compiler found to build 'xxx'  的錯誤,代表你沒有編譯器,請回到系統安裝 gcc或是 gcc-g++

No 'C' compiler found to build 'threads'

# yum install gcc

 

5. 移除安裝的module

cpan 可以安裝模組,但卻不能移除模組(但cpanm可以,請參看最下面),只能借用別的方法,這裡 https://metacpan.org/pod/ExtUtils::Packlist#EXAMPLE 有移除的程式,只要複製回來建立一個檔案再執行即可,例如 建立一個檔 remove_module.pl 把下面的內容貼入

#!/usr/local/bin/perl -w
 
use strict;
use IO::Dir;
use ExtUtils::Packlist;
use ExtUtils::Installed;
 
sub emptydir($) {
    my ($dir) = @_;
    my $dh = IO::Dir->new($dir) || return(0);
    my @count = $dh->read();
    $dh->close();
    return(@count == 2 ? 1 : 0);
}
 
# Find all the installed packages
print("Finding all installed modules...\n");
my $installed = ExtUtils::Installed->new();
 
foreach my $module (grep(!/^Perl$/, $installed->modules())) {
   my $version = $installed->version($module) || "???";
   print("Found module $module Version $version\n");
   print("Do you want to delete $module? [n] ");
   my $r = <STDIN>; chomp($r);
   if ($r && $r =~ /^y/i) {
      # Remove all the files
      foreach my $file (sort($installed->files($module))) {
         print("rm $file\n");
         unlink($file);
      }
      my $pf = $installed->packlist($module)->packlist_file();
      print("rm $pf\n");
      unlink($pf);
      foreach my $dir (sort($installed->directory_tree($module))) {
         if (emptydir($dir)) {
            print("rmdir $dir\n");
            rmdir($dir);
         }
      }
   }
}

這個舊型程式的缺點是他會一個模組一個模組的詢問,你得一一確認直到你要刪除的那個為止。(有新版本的程式可用,但缺點是需要更新的perl來執行。)因為我的系統是5.8,又無法更新,只好將就用,如果不小心刪錯的話,重裝即可。但是如果問你 Cwd,千萬不能刪,刪了cpan就壞了....

Do you want to delete Cwd? [n] y   //千萬不能刪,刪了cpan就壞了....

不過壞了就重裝perl就好了,也不必太緊張啦

# yum reinstall perl

 

6. 使用 cpanm

cpanm 可以略過安裝的 shell直接安裝模組

安裝cpanm

# cd /bin/

# curl -L https://cpanmin.us/ -o cpanm

# chmod +x cpanm

安裝完畢後在 /bin資料匣中會有 cpanm這個可執行檔

使用 cpanm安裝套件

# cpanm Time::Elapse
--> Working on Time::Elapse
Fetching http://www.cpan.org/authors/id/S/SG/SGODIN/Time-Elapse-1.2402.tar.gz ... OK
Configuring Time-Elapse-1.2402 ... OK
Building and testing Time-Elapse-1.2402 ... OK
Successfully installed Time-Elapse-1.2402
1 distribution installed

更方便的安裝方法,未來再重覆執行可作套件的更新

 

7. 使用 cpanm 移除模組

如果是由 cpanm 安裝的模組就能由cpanm來移除

# cpanm --uninstall Sub::Uplevel
Sub::Uplevel contains the following files:

  /root/perl5/lib/perl5/Sub/Uplevel.pm
  /root/perl5/man/man3/Sub::Uplevel.3pm

Are you sure you want to uninstall Sub::Uplevel? [y] y

Unlink: /root/perl5/lib/perl5/Sub/Uplevel.pm
Unlink: /root/perl5/man/man3/Sub::Uplevel.3pm
Unlink: /root/perl5/lib/perl5/x86_64-linux-thread-multi/auto/Sub/Uplevel/.packlist

Successfully uninstalled Sub::Uplevel

 

 


原文 2009-10-21 15:37:26  2018.1.7 再編修

你可能感興趣的文章

[PERL] 01-撰寫第一隻PERL程式 PERL的系列教學文,適合有其他程式經驗但沒學過PERL的人

[PERL] 05-運算子 #1 PERL的運算子介紹,總共有21種

Perl 的列舉寫法(map list) 使用列舉的寫法來設定陣列,非常的強大

[PERL] 03-條件式判斷 perl的條件式判斷

自行撰寫syslog server建立資訊安全控管中心#1 -- 前言及syslog介紹 利用PERL將syslog收攏到資料庫的程式

[PERL] 22-日期和時間 Perl 取得日期時間的方法整理,使用 localtime等多種函數

Perl 計算經過的時間 Perl 計算程式執行經過的時間

[PERL] 10- 雜湊 Perl 的hash 指標陣列

[PERL] 08-陣列 #2 --操作 更多perl陣列的操作,如拆開、黏合、取出、加入等等

PERL一次讀取檔案所有內容的方法($/) perl可以使用slurp mode一次讀完檔案所有內容的方法及一些範例

我有話要說


限制:留言最高字數1000字,超過部分會被截掉。請注意:留言不可帶有網址,會被濾掉。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

HP SAS硬碟leds燈號說明 HP SAS硬碟leds燈號(hp g7/g6系統適用)說明

沒有非誰做不可的事,也沒有不可被取代的人 沒有非誰做不可的事,也沒有不可被取代的人

[CodeIgniter3] 解決無法上傳特定檔案(.sb2)的問題 上傳時出現The filetype you are attempting to upload is not allowed,要怎麼解決?

維修冰箱 維修冰箱

最值得學的電腦技能 什麼是最值得學的電腦技能?程式設計?美工繪圖?系統網路?還是…? 都不是!個人覺得一個最值得學的電腦技能就