簡體   English   中英

如何告訴CPAN.pm使用特定於應用程序的mini-cpan?

[英]How do I tell CPAN.pm to use an application-specific mini-cpan?

有沒有辦法使用特定於應用程序的迷你CPAN(以確保不同應用程序的特定模塊版本,並使安裝工作沒有網絡訪問)。 '標准'mini-cpan方式依賴於在CPAN / Config.pm中使用文件URL設置'o conf urllist'

一個迷你cpan就好了。 但是,我需要為每個應用程序(應用程序本地)從不同目錄自動安裝CPAN,因為每個應用程序都有不同的版本要求。

以下幾乎可以工作,但之后只有一個部分工作的shell,仍然從網上取來而不是使用$file_url位置的mini-cpan:

use CPAN;
use FindBin qw($Bin);

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

CPAN::shell();

您為每個應用程序加載不同的配置文件。 最新的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”以僅包含本地minicpans。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM