![](/img/trans.png)
[英]A Perl script and a Perl module are using `use lib` and referencing the same module
[英]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.