簡體   English   中英

Perl-將lib與具有依賴項的perl模塊一起使用

[英]Perl - Use lib with perl module which have dependencies

我有一個使用模塊Net::SSH::Any的Perl腳本。 由於它不屬於“默認” Perl安裝,因此我必須使用use lib功能將其包括在腳本中。

現在,我在驅動器上有目錄c:\\lib\\net\\ssh\\any\\ ,並指定了以下內容: use lib c:/lib; 在我的腳本的開頭。

它“有效”:它沒有說模塊丟失了,但是說它找不到auto/Net/SSH2/autosplit.ix ,最后no backend available at...

當我在c:\\lib\\目錄中添加auto目錄(包含正確的結構)並啟動腳本時,出現以下錯誤:

No backend available at...

這是Net :: SSH :::的內部錯誤,任何提及它都無法訪問后端目錄(已包含:/)

有誰知道如何解決這樣的問題? 我希望我足夠清楚。

您需要使用Local :: Lib 這將使您可以在備用位置安裝和加載一大堆庫及其依賴項。 我使用cpanm來管理我的模塊和類似這樣的命令(將其放入包裝腳本中)。

cpanm -L $cpandir $M --no-skip-installed

其中$cpandir是您的locallibdir,而$M是您要安裝的模塊。

然后在您的代碼中指定

use local::lib '~/foo'; 

但是,我建議設置一個PERL5LIB環境變量,該變量會將您的自定義位置附加到@INC ,並使多余的使用local :: lib行不再必要。 通常,您會在主目錄中使用以下行來編輯.bashrc.profile

export PERL5LIB=/home/myusername/mymods/

該問題是由以下事實引起的:該模塊已下載並安裝在32位Windows上,但是我試圖在perl 64位安裝上運行它! 因此,Net :: SSH2必需的模塊無法正確執行。

恢復:

-如何檢測問題:通過執行以下命令:(感謝Salva)“ perl -Ic:\\ lib -MNet :: SSH2 -e1”

-我腳本中的模塊定義: use lib 'c:\\lib'; lib'c use lib 'c:\\lib';

暫無
暫無

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

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