Perl 无法识别 root 用户的模块/模块路径
Perl not recognizing module / module path for root user
我是 Perl 新手,所以请多多包涵。感谢您的帮助。
我有一台装有 Perl 的 Ubuntu 机器。我关注了 local::lib bootstrapping guide
我使用 cpanm 将 DBI 和其他模块安装到我的系统中。我担心我的系统上可能还有其他可用的 DBI 模块,这可能是问题的一部分。这是 find / -name 'DBI.pm' 2>/dev/null
:
的结果
/home/ubuntu/.cpanm/work/16125643.6178/DBI-1.643/blib/lib/DBI.pm
/home/ubuntu/.cpanm/work/16125643.6178/DBI-1.643/blib/lib/Bundle/DBI.pm
/home/ubuntu/.cpanm/work/16125643.6178/DBI-1.643/DBI.pm
/home/ubuntu/.cpanm/work/16125643.6178/DBI-1.643/lib/Bundle/DBI.pm
/home/ubuntu/perl5/lib/perl5/x86_64-linux-gnu-thread-multi/DBI.pm
/home/ubuntu/perl5/lib/perl5/x86_64-linux-gnu-thread-multi/Bundle/DBI.pm
我在 .bashrc 文件中添加了 2 行。 (我添加第二行是因为我为非 root 用户破坏了一些东西并且修复了它;也许我用 local::lib 破坏了一些东西?)
eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)"
PERL5LIB="/home/ubuntu/perl5/lib/perl5"
我可以 运行 我的 perl 脚本作为非 root 用户。
如果我 运行 和 sudo perlScript.pl
我得到这个错误: Can't locate DBI.pm in @INC (you may need to install the DBI module)
我已经对@INC 进行了一段时间的故障排除,但不知道如何为 root 用户调整它。我尝试了各种方法,包括将 PERL5LIB 添加到 .profile 并像这样调用我的脚本:sudo sh -c '. ~/.profile; perl ~/perlScripts/perlScript.pl "argForScript"'
(我验证了 PERL5LIB 是用 sudo sh -c '. ~/.profile; echo $PERL5LIB'
设置的)
但是我总是收到@INC 错误。我注意到的最明显的事情是比较 sudo perl -V
和 perl -V
。 sudo 调用不显示任何 ENV 变量,@INC 不包含所需的 PERL5LIB 位置。非 sudo 调用确实显示了所需的 ENV 和 @INC 变量。
我正在考虑擦除内容并使用 local::lib 和 cpan 的 root 权限进行全新安装。不太确定此时还可以尝试什么。
这些是最终对我有用的命令。我用 local::lib / non-sudo cpan install 破坏了我的第一个环境,所以我设置了一个新的 VM。
sudo apt install make
sudo apt install build-essential
sudo apt install libmysqlclient-dev
sudo cpan App::cpanminus
cpanm --sudo DBI
cpanm --sudo Array::Utils
cpanm --sudo DBD::mysql
我是 Perl 新手,所以请多多包涵。感谢您的帮助。
我有一台装有 Perl 的 Ubuntu 机器。我关注了 local::lib bootstrapping guide
我使用 cpanm 将 DBI 和其他模块安装到我的系统中。我担心我的系统上可能还有其他可用的 DBI 模块,这可能是问题的一部分。这是 find / -name 'DBI.pm' 2>/dev/null
:
/home/ubuntu/.cpanm/work/16125643.6178/DBI-1.643/blib/lib/DBI.pm
/home/ubuntu/.cpanm/work/16125643.6178/DBI-1.643/blib/lib/Bundle/DBI.pm
/home/ubuntu/.cpanm/work/16125643.6178/DBI-1.643/DBI.pm
/home/ubuntu/.cpanm/work/16125643.6178/DBI-1.643/lib/Bundle/DBI.pm
/home/ubuntu/perl5/lib/perl5/x86_64-linux-gnu-thread-multi/DBI.pm
/home/ubuntu/perl5/lib/perl5/x86_64-linux-gnu-thread-multi/Bundle/DBI.pm
我在 .bashrc 文件中添加了 2 行。 (我添加第二行是因为我为非 root 用户破坏了一些东西并且修复了它;也许我用 local::lib 破坏了一些东西?)
eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)"
PERL5LIB="/home/ubuntu/perl5/lib/perl5"
我可以 运行 我的 perl 脚本作为非 root 用户。
如果我 运行 和 sudo perlScript.pl
我得到这个错误: Can't locate DBI.pm in @INC (you may need to install the DBI module)
我已经对@INC 进行了一段时间的故障排除,但不知道如何为 root 用户调整它。我尝试了各种方法,包括将 PERL5LIB 添加到 .profile 并像这样调用我的脚本:sudo sh -c '. ~/.profile; perl ~/perlScripts/perlScript.pl "argForScript"'
(我验证了 PERL5LIB 是用 sudo sh -c '. ~/.profile; echo $PERL5LIB'
设置的)
但是我总是收到@INC 错误。我注意到的最明显的事情是比较 sudo perl -V
和 perl -V
。 sudo 调用不显示任何 ENV 变量,@INC 不包含所需的 PERL5LIB 位置。非 sudo 调用确实显示了所需的 ENV 和 @INC 变量。
我正在考虑擦除内容并使用 local::lib 和 cpan 的 root 权限进行全新安装。不太确定此时还可以尝试什么。
这些是最终对我有用的命令。我用 local::lib / non-sudo cpan install 破坏了我的第一个环境,所以我设置了一个新的 VM。
sudo apt install make
sudo apt install build-essential
sudo apt install libmysqlclient-dev
sudo cpan App::cpanminus
cpanm --sudo DBI
cpanm --sudo Array::Utils
cpanm --sudo DBD::mysql