2009-07-19 96 views
4

有沒有一種方法可以使用特定於應用程序的微型CPAN(以確保不同應用程序的特定模塊版本,並在沒有網絡訪問的情況下進行安裝)。 'standard'mini-cpan的方式依賴於通過CPAN/Config中的文件URL設置'o conf urllist'。如何讓CPAN.pm使用特定於應用程序的mini-cpan?

這對一個mini-cpan來說很好。但是,我需要爲每個應用程序(本地應用程序)從不同目錄進行CPAN安裝自動化,因爲每個應用程序都有不同的版本要求。

use CPAN; 
use FindBin qw($Bin); 

my $file_url="file:///$Bin/../cpan"; 
CPAN::Shell->o(qw(conf urllist),$file_url); 

CPAN::shell(); 
+3

您可以使用PAR :: Packer打包您的perl應用程序嗎? – Nifle 2009-07-19 12:48:00

回答

5

您加載不同的配置文件:從$file_url位置

以下幾乎作品,但當時只有部分工作的外殼,並且還從Web上獲取的,而不是使用迷你CPAN爲每個應用程序。最新cpan命令有-j開關來做到這一點:

$ cpan -j some/app/Config.pm -i Foo::Bar 

這個最新的功能不包含在CPAN.pm分佈又因爲它是實驗性的。我已經使用了幾個月,但是,作爲我的DPAN工作的一部分。

如果你不喜歡任何一個,你只需要提供你的應用程序特定的CPAN::Config模塊,Perl會在它找到你的個人或站點版本之前找到它。將當前的CPAN/Config.pm複製到您的應用程序模塊目錄中,並確保該目錄是@INC中的第一個(可能使用PERL5LIB環境變量)。 CPAN.pm應該首先找到並使用它。它只使用它找到的第一個。這在配置固定時很方便,但由於您可以在模塊中運行代碼,因此它有點靈活。它的配置是Perl代碼。

如果這對您不夠好,您可以在應用程序中覆蓋CPAN::HandleConfig(),以便CPAN.pm不加載任何文件。然後你自己設定值。當你有很多應用邏輯來解決某些配置值時,這一點特別方便。 CPAN.pm配置只是%CPAN::Config散列,因此您只需爲相應的鍵設置正確的值即可。

在任何情況下,您可能都希望將「connect_to_internet_ok」配置設置爲false值,並清理「urllist」以使其僅具有本地小文件。

相關問題