作爲系統管理員或應用程序開發者有一個共同的問題你通常面對。當您開發一個應用程序時,您可能總是需要最新的和最新的模塊,而不是使用發行版的模塊。但即使你對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。
可能是另一個安裝了perlbrew的Perl二進制文件? '哪個perl'返回什麼?否則發佈腳本。每個腳本都可以在啓動時修改@INC,因此可能發生它找不到該模塊。 – 2014-11-05 19:00:34
是否確定要將模塊安裝在virtualbox guest中,而不是主機? :) – ysth 2014-11-05 19:04:12
@SidBurn:哪個perl返回「/home/qiime/perl5/perlbrew/perls/perl-5.16.0/bin/perl」 – MLS 2014-11-05 19:09:21