2014-11-05 253 views
0

通過VirtualBox運行UBUNTU 14.04。CPAN模塊聲稱安裝但不要

當執行一個腳本,我得到以下錯誤:

Can't locate XML/Simple.pm in @INC (@INC contains:...

現在,當我檢查目錄中@INC,他們確實不包含XML/Simple.pm

我又試圖通過CPAN

安裝它
sudo cpan XML::Simple

,它告訴我說:

XML::Simple is up to date (2.20).

其中,根據perl是不正確的,因爲

perl -e "use XML::Simple "

輸出

Can't locate XML/Simple.pm in @INC (@INC contains:

所以,我缺少什麼?

+1

可能是另一個安裝了perlbrew的Perl二進制文件? '哪個perl'返回什麼?否則發佈腳本。每個腳本都可以在啓動時修改@INC,因此可能發生它找不到該模塊。 – 2014-11-05 19:00:34

+0

是否確定要將模塊安裝在virtualbox guest中,而不是主機? :) – ysth 2014-11-05 19:04:12

+0

@SidBurn:哪個perl返回「/home/qiime/perl5/perlbrew/perls/perl-5.16.0/bin/perl」 – MLS 2014-11-05 19:09:21

回答

1

一般來說,你不應該混淆系統perl

使用

$ which perl

$ sudo which perl

看到每個perl生活。

3

在Linux系統上安裝Perl模塊的另一種方法是從分發存儲庫中獲取。在Debian/Ubuntu的系統一CPAN分佈名稱轉換爲一個恰當的包名的一般規則是:

  1. 模塊名稱轉換爲小寫
  2. 轉換「::」以「 - 」
  3. 加一個「LIB」字頭和「-perl」後綴

所以對於XML包名::簡單的將是:libxml-simple-perl,你可以用它安裝:

sudo apt-get install libxml-simple-perl 

也有例外這些規則,但你總是可以被Perl模塊名稱搜索:

apt-cache search XML::Simple 

你不會從你的發行版的包庫,但穩定的(一些可能得到的絕對是最新版本的模塊說'瀕死')模塊像XML :: Simple通常無關緊要。

如果你有安裝Perl的多個版本,然後從你的發行版的包庫中安裝通常只產生可用於系統的Perl包/usr/bin

1

作爲系統管理員或應用程序開發者有一個共同的問題你通常面對。當您開發一個應用程序時,您可能總是需要最新的和最新的模塊,而不是使用發行版的模塊。但即使你對Linux版本中的版本沒有問題,有時候你也會遇到問題,你需要一個特定的Perl模塊,但它不包含在你的發行版中。

解決這個問題的方法很簡單,只是打電話給cpan XML::Simple,然後下載並安裝最新的模塊。

但是,當你這樣做,你正在搞亂你的Linux發行版的包系統。假設您已經從您的包系統安裝了XML :: Simple。您的cpan命令現在將更新已安裝的版本並將其替換爲更新的版本。所有這一切都很好,直到你的Linux發行版例如會發布更新libxml-simple-perl。可能發生的事情是,你的新版本會恢復到舊版本。

因爲所有Perl模塊通常都依賴於其他Perl模塊,所以安裝命令也可以更新很多其他Perl模塊。

所有這些行爲都可能導致修復錯誤。無論是在你寫的應用程序中,還是在分發的應用程序中。

要「解決」這個問題,通常最好的辦法是讓系統Perl完全獨立。從源代碼完整編譯您自己的Perl版本。這個Perl版本比自己的perl庫要好,你可以直接從CPAN安裝,而不會搞亂系統Perl。

現在要做到這一點很容易,他們存在一個名爲Perlbrew

有了這個工具,你可以很容易地安裝任何版本的Perl工具。例如,只需輸入perlbrew install perl-5.16.0並完全安裝Perl 5.16.0到您的主目錄中!它還設置所有路徑,以便在系統中調用perl解析爲此perlbrew安裝。

另外一個重要的部分是,這個Perl安裝只是在你的主目錄下的普通用戶帳戶下。您不需要sudo或root帳戶,因爲Perl會安裝在您的主目錄中。

Perl模塊也是如此。如果要在Perlbrew安裝中安裝Perl模塊,只需鍵入cpan XML::Simple(或cpanm XML::Simple結帳App::cpanminus)。

現在是重要的部分。在你的系統上,你已經有了Perlbrew的設置。當您執行使用Perlbrew安裝的安裝程序時。但在這個Perlbrew安裝中沒有安裝XML :: Simple。

然後執行sudo cpan XML::Simple安裝XML :: Simple。問題是所有sudo命令都只是以root用戶身份執行。這意味着您的系統使用Perl /usr/bin/perl而不是您的Perlbrew安裝/home/qiime/perl5/perlbrew/perls/perl-5.16.0/bin/perl

您在系統Perl中成功安裝了XML :: Simple。但是你的Perlbrew安裝沒有安裝XML :: Simple,因此它仍然返回一個錯誤,它找不到XMl :: Simple。

你真正需要做的唯一的事情就是cpan XML::Simple在你的主目錄下的perlbrew安裝中安裝XML :: Simple。