Как я могу использовать CPAN в качестве некорневого пользователя?

Я хочу установить модули жемчуга на общем сервере, на котором у меня нет корневого доступа. Как я могу сделать это? У них также, кажется, есть более старая версия CPAN (он жалуется на то, что при выполнении команды), действительно ли возможно обновить команду CPAN, используемую из моей учетной записи, не требуя корневого доступа?

76
задан brian d foy 17 September 2010 в 15:38
поделиться

2 ответа

Самый простой метод, который я нашел до сих пор, это сказать

wget -O- http://cpanmin.us | perl - -l ~/perl5 App::cpanminus local::lib
eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`
echo 'eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`' >> ~/.profile
echo 'export MANPATH=$HOME/perl5/man:$MANPATH' >> ~/.profile

Это предполагает, что ваш профиль имеет имя .profile, вам может понадобиться изменить его на .bash_profile, .bashrc и т.д. После этого вы можете установить модули, сказав

cpanm Module::Name

и просто использовать их так же, как если бы они были установлены в корневых каталогах.


Далее следует краткое объяснение того, что делают приведенные выше команды.

wget -O- http://cpanmin.us получает последнюю версию cpanm и печатает ее в STDOUT, который затем передается в perl - -l ~/perl5 App::cpanminus local::lib. Первые - говорят perl ожидать прихода программы на STDIN, это заставляет perl запустить версию cpanm, которую мы только что скачали. perl передает остальные аргументы в cpanm. Аргумент -l ~/perl5 указывает cpanm, куда устанавливать модули Perl, а два других аргумента - это два модуля для установки. [App::cpanmins]1 - это пакет, который устанавливает cpanm. local::lib - это вспомогательный модуль, который управляет переменными окружения, необходимыми для запуска модулей в локальной директории.

После установки этих модулей мы запускаем

eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`

для установки переменных окружения, необходимых для использования локальных модулей, а затем

echo 'eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`' >> ~/.profile

для обеспечения возможности их использования при следующем входе в систему.

echo 'export MANPATH=$HOME/perl5/man:$MANPATH' >> ~/.profile

надеюсь, заставит man найти man-страницы для ваших локальных модулей.

132
ответ дан 24 November 2019 в 11:16
поделиться

http://web.archive.org/web/20120427144232/http://perl.jonallen.info/writing/articles/install-perl-modules-without-root

http://novosial.org/perl/life-with-cpan/non-root/

Основной шаг в обоих наборах инструкций включает модуль local::lib

AFAIK, логика CPAN содержится в модуле Perl (CPAN.pm), что означает, что вы также можете легко установить новый модуль в свой локальный каталог, как и любой другой модуль Perl.


Также, после установки модулей в нестандартное место, проверьте эти два вопроса о загрузке библиотек из нестандартных мест (часть информации уже доступна в ссылке выше):

Как программа Perl узнает, где найти файл, содержащий используемый ею модуль Perl?

Как строится @INC Perl? (aka Какие есть все способы повлиять на то, где будут искаться модули Perl?)

12
ответ дан 24 November 2019 в 11:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: