2014-02-18 185 views
0

我想要一個perl腳本,它會在運行perl腳本時自動安裝所有的cpan模塊。你能幫忙嗎?通過perl腳本安裝cpan模塊?

+0

什麼平臺是你嗎?我可以提出一個建議,如何在Linux上做到這一點,但它不嚴格基於perl的。 – Jeef

+0

其實我現在在Windows上工作,但如果你能在Linux中講述,那麼對我來說也是好的。 – user3248333

回答

2

CPAN客戶端只是一個Perl module它是由命令行工具包裝。因此,您可以直接從Perl腳本中調用它。

但是,您可能需要系統管理員權限才能安裝新模塊。避免這種情況的一種方法是使用local::lib,或者向用戶請求必要的權限。在Unix上,如果不以root身份運行,您可以拒絕運行腳本。但是,這會引發許多安全問題,應儘可能避免。

一個相當健全的解決方案是要求您的用戶安裝cpanm client,並在cpanfile中指定您的依賴關係。您的用戶然後只需要做cpanm --installdeps /dir/of/your/script

但是,如果我們已經經歷了所有這些麻煩,你也可以做一個適當的CPAN分配。您不必將其上傳到CPAN,但可以分發tarball,並讓用戶安裝它。這有很多優點:成熟的工具鏈,自動化測試和像Dist::Zilla這樣的創建分佈的微妙助手。

+0

如何捕獲安裝的輸出 – user3248333

+1

查看'cpan'工具的源代碼。這只是一個Perl程序。 –

+0

我贏了7.我還不確定你是如何回答OP的問題的。我需要在用戶PC上執行期間在我的腳本中安裝一些模塊。我也嘗試了下面的建議,但它並沒有工作。我的perl抱怨說我錯過了CPAN :: Shell。我在5.18.2版本。如果安裝缺失模塊的腳本本身需要用戶安裝另一個模塊'cpanm',那麼這個建議有什麼錯誤?我不能指望我的用戶安裝像Firefox或Chrome這樣的簡單應用程序。 – YouHaveaBigEgo

1

使用CPAN::Shell,從文檔:

CPAN::Shell->install("Acme::Meta"); 
+0

通過perl腳本中的CPAN :: Shell安裝perl模塊的依賴關係的任何可能性 – user3248333

+0

我想通過perl腳本爲cpanmodule添加代理,我該怎麼做? – user3248333

+1

閱讀文檔,它清楚地說明了如何做到這一點。如果你想使用這個工具,請閱讀手冊 –