Как я могу использовать CPAN как пользователь без полномочий root? - PullRequest
74 голосов
/ 05 июня 2010

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

Ответы [ 4 ]

129 голосов
/ 05 июня 2010

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

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 для ваших локальных модулей.

11 голосов
/ 05 июня 2010

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, который она использует?

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

5 голосов
/ 29 ноября 2011

Для полноты, это процесс установки 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 голосов
/ 03 января 2017

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

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