2010-04-12 39 views
3

能在@INC CPAN依賴期間找不到安裝在努力做執行不作爲根

perl -I'/v1/data/site_perl' -MCPAN -e 'install Log::Dispatch'; 

我繼續得到「在@INC無法找到PARAMS/Validate.pm。」在查看輸出時,即使我使用了-I,/ v1/data/site_perl也不在顯示的@INC中。

我不是根,所以我改變了我的CPAN配置,使:

'makepl_arg' => q[LIB=/v1/data/site_perl INSTALLSITEMAN1DIR=/v1/data/site_perl/man/man1 INSTALLSITEMAN3DIR=/v1/data/site_perl/man/man3 INSTALLMAN1DIR=/v1/data/site_perl/man/man1 INSTALLMAN3DIR=/v1/data/site_perl/man/man3] 

因此,即使LIB設置。

在一個基本的腳本我有:

use lib '/v1/data/site_perl'; 
use Params::Validate; 

,沒有任何問題。

如何在沒有強制安裝的情況下使Log :: Dispatch使用lib/v1/data/site_perl?我錯過了什麼?

+1

http://stackoverflow.com/questions/102850/how-can-i-install-cpan-modules-locally-without-root-access-dynaloader-pm-line-22和http:// stackoverflow.com/questions/540640/how-can-i-install-a-cpan-module-into-a-local-directory – Ether 2010-04-12 21:06:52

回答

3

我相信CPAN.pm喜歡爲各種任務調用很多子流程,並且這些最終會開始新的perl s,它不會繼承您的-I標誌。相反,嘗試設置一個PERL5LIB環境變量,例如

PERL5LIB='/v1/data/site_perl' perl -MCPAN -e 'install Log::Dispatch' 

另一個戰略考慮是簡單地在您的本地目錄中建立一個完整的Perl安裝 - 然後使用 Perl的CPAN工具。他們已經擁有內置的所有自己的路徑。這是我傾向於這樣做的方式。

+0

謝謝你的快速和正確的回覆。 – garrett 2010-04-12 21:48:06

2

使用簡單的-I標誌不能將其安裝到不同的CPAN目錄中。您可以使用local::lib軟件包安裝本地一組庫,或者參見this questionthis question

+0

我用-I將我的非root lib添加到@INC。一旦CPAN到達主模塊,它就無法找到最近安裝的模塊,因爲@INC的實例不包含我的目錄。我沒有嘗試設置PERL5LIB,它工作。本地:: lib沒有安裝在該機器上,但很快就會!謝謝(你的)信息。 – garrett 2010-04-12 21:55:07