Perl не распознает модуль / путь к модулю для пользователя root
Я новичок в Perl, так что терпите меня. Спасибо за помощь.
У меня есть машина Ubuntu с Perl. Я следовал руководству по загрузке local::lib
Я использовал 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
Я добавил 2 строки в свой файл .bashrc. (Я добавил вторую строку, потому что я сломал что-то для пользователя без полномочий 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.
Я рассматриваю возможность протирания данных и выполнения новой установки с привилегиями root для local::lib и cpan. Не совсем уверен, что еще попробовать на этом этапе.
1 ответ
Это команды, которые в итоге сработали для меня. Я испортил свою первую среду с помощью local::lib / non-sudo cpan install, поэтому я установил новую виртуальную машину.
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