Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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?)

Ответ 3

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

Ответ 4

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

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

Ответ 5

на самом деле это просто копия приведенных выше ответов, но в одном повторно используемом скрипте bash:

 #! /usr/bin/env bash                                                                                                                                                     │··  
                                                                                                                                                                           │··
  # a bash wrapper for check-installing required perl modules as non-root  
main(){                                                                                                                                                                  │··
     doSetVars                                                                                                                                                             │··
     doCheckInstallPreReqs                                                                                                                                                 │··
     perl $PRODUCT_INSTANCE_DIR/src/perl/my-perl-script.t                                                                                                                          │··
  }                                                                                                                                                                        │··
                                                                                                                                                                           │··
  doSetVars(){                                                                                                                                                             │··
     #set -x                                                                                                                                                               │··
     umask 022    ;                                                                                                                                                        │··
     set -u -o pipefail                                                                                                                                                    │··
     run_unit_bash_dir=$(perl -e 'use File::Basename; use Cwd "abs_path"; print dirname(abs_path(@ARGV[0]));' -- "$0")                                                     │··
     export PRODUCT_INSTANCE_DIR=$run_unit_bash_dir/../..                                                                                                                  │··
  }                                                                                                                                                                        │··
                                                                                                                                                                           │··
  doCheckInstallPreReqs(){                                                                                                                                                 │··
     eval 'perl -I ~/perl5/lib/perl5 -Mlocal::lib'                                                                                                                         │··
     perl -e '                                                                                                                                                             │··
        use JSON ;                                                                                                                                                         │··
        use Data::Printer;                                                                                                                                                 │··
        use Test::Most ;                                                                                                                                                   │··
        use Test::Mojo;                                                                                                                                                    │··
        use Data::Printer ;                                                                                                                                                │··
        use FindBin;                                                                                                                                                       │··
        use JSON::Parse ;                                                                                                                                                  │··
        use IPC::System::Simple ;                                                                                                                                          │··
        use Mojolicious ;                                                                                                                                                  │··
     ' || {                                                                                                                                                                │··
           curl -L 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'' >> ~/.bashrc                                                                                               │··
           cpanm --local-lib=~/perl5 local::lib && eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib)                                                                         │··
           export PERL_MM_USE_DEFAULT=1                                                                                                                                    │··
           cpanm JSON Data::Printer Test::Most Test::Mojo Data::Printer FindBin JSON::Parse \                                                                              │··
              IPC::System::Simple                                                                                                                                          │··
           sudo curl -L cpanmin.us | perl - Mojolicious                                                                                                                    │··
     }                                                                                                                                                                     │··
                                                                                                                                                                           │··
  }                                                                                                                                                                        │··
                                                                                                                                                                           │··
  main