我有一個服務器,我已經安裝了一些perl模塊。我通過CPAN安裝了前幾個,即perl -MCPAN -e'install Module :: Name'作爲非root用戶。perl cpan模塊安裝
然後我遇到了一些問題,並開始通過sudo或root安裝它們。
昨晚我通過cron作業的輸出發現了一些腳本失敗,因爲它們無法在@INC數組中找到模塊。
我發現有問題的服務器上,perl -V來顯示以下內容:
爲根:
%ENV:
PERL5LIB="/root/perl5/lib/perl5:"
PERL_LOCAL_LIB_ROOT=":/root/perl5"
PERL_MB_OPT="--install_base /root/perl5"
PERL_MM_OPT="INSTALL_BASE=/root/perl5"
@INC:
/root/perl5/lib/perl5/x86_64-linux-thread-multi
/root/perl5/lib/perl5
/usr/local/lib64/perl5
/usr/local/share/perl5
/usr/lib64/perl5/vendor_perl
/usr/share/perl5/vendor_perl
/usr/lib64/perl5
/usr/share/perl5
,並作爲非root用戶:
%ENV:
PERL5LIB="/home/user/perl5/lib/perl5:"
PERL_LOCAL_LIB_ROOT=":/home/user/perl5"
PERL_MB_OPT="--install_base /home/user/perl5"
PERL_MM_OPT="INSTALL_BASE=/home/user/perl5"
@INC:
/home/user/perl5/lib/perl5/x86_64-linux-thread-multi
/home/user/perl5/lib/perl5
/usr/local/lib64/perl5
/usr/local/share/perl5
/usr/lib64/perl5/vendor_perl
/usr/share/perl5/vendor_perl
/usr/lib64/perl5
/usr/share/perl5
我檢查了另一個服務器,perl模塊的安裝從來沒有出現過問題,並且它顯示相同的輸出,不管是否以root用戶身份運行,只有@INC,沒有定義$ ENV。
@INC:
/usr/local/lib64/perl5
/usr/local/share/perl5
/usr/lib64/perl5/vendor_perl
/usr/share/perl5/vendor_perl
/usr/lib64/perl5
/usr/share/perl5
所以我的問題是,我怎麼能我有問題,沒有針對不同用戶不同環境和@INC值在服務器上配置CPAN。我寧願它只有一個perl模塊的默認系統位置,所有人都可以訪問。我假設我需要從CPAN shell運行o conf init,或直接編輯/root/.cpan/CPAN/MyConfig.pm和/home/user/.cpan/CPAN/MyConfig,但不太確定我需要的確切編輯製造。
謝謝
@INC中的大部分在構建時都被硬編碼到Perl中。 Env var像PERL5LIB被添加到它。 「cpan」與此無關。 – ikegami
安裝它們的位置應該沒有關係,因爲它們將安裝到的路徑將位於'@ INC'中(除非您明確地覆蓋此位置)。 – ikegami
請注意,您似乎正在使用系統Perl。你應該讓系統的軟件包管理器添加軟件包,而不是'cpan'。否則可能會有風險。 – ikegami