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

65

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

Теги:
cpan

4 ответа

127
Лучший ответ

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

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

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

  • 0
    +1 для cpanminus ... никогда не использовал его, поэтому я не могу рекомендовать его, но мне нравится то, что я видел на SO до сих пор
  • 7
    Это работает отлично для меня. Просто небольшая заметка, чтобы сначала удалить все существующие переменные окружения PERL5LIB, уже находящиеся в вашем ~ / .profile (или как угодно). В противном случае local :: lib не удастся установить при запуске первой команды.
Показать ещё 9 комментариев
10

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 module

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


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

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

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

  • 0
    Раскрытие - я написал оба SO вопроса, связанных в этом ответе.
  • 2
    Существует как минимум четыре различных способа установки модулей из CPAN: вручную, модуль CPAN (и его эквивалент cpan командной строки), модуль CPANPLUS (и его эквивалент cpanp командной строки) и новый дистрибутив App :: cpanminus, который устанавливает cpanm . Из них я считаю, что cpanm проще всего установить и использовать. cpan и cpanp установлены по умолчанию, но для корректной работы требуются значительные настройки.
Показать ещё 1 комментарий
5

Для полноты, это процесс установки cpanm в OSX, если вы хотите сохранить perl5 под ~/Library.

curl -L http://cpanmin.us | perl - -l ~/Library/perl5 App::cpanminus local::lib
eval `perl -I ~/Library/perl5/lib/perl5 -Mlocal::lib=~/Library/perl5`
echo 'eval `perl -I ~/Library/perl5/lib/perl5 -Mlocal::lib=~/Library/perl5`' >> ~/.bash_profile
2

Если вы хотите читать man-страницы для установленных модулей cpanminus, вы также должны убедиться, что правильный подкаталог выбранного пути библиотеки находится в MANPATH. Поэтому приведенное выше решение, показывающее процесс установки cpanm, нуждается в следующей дополнительной команде:

 export MANPATH=$HOME/Library/perl5/man:$MANPATH' >> ~/.bash_profile

Ещё вопросы

Сообщество Overcoder
Наверх
Меню