2010-06-05 10 views
65

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

+1

возможно дубликат [Как я могу использовать новый модуль Perl без установки разрешения] (http://stackoverflow.com/questions/ 251705/how-can-i-use-a-new-perl-module-without-install-permissions) – daxim

ответ

117

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

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 так – DVK

+6

Это отлично работает для меня. Просто небольшое примечание, чтобы удалить сначала любые существующие переменные среды PERL5LIB, уже находящиеся в вашем ~/.profile (или что-то еще). В противном случае local :: lib не сможет установить при запуске первой команды. –

+0

@juannavar Хорошая мысль, я стараюсь установить ее на недавно установленные машины, поэтому я не сталкиваюсь с этим. –

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.


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

How does a Perl program know where to find the file containing Perl module it uses?

How is Perl’s @INC constructed? (ака Каковы все способы затрагивающий где модули Perl ищутся?)

+0

Раскрытие информации - я создал оба SO-вопросов, связанных с этим ответом. – DVK

+2

Существует не менее четырех различных способов установки модулей из CPAN: вручную, модуль CPAN (и его эквивалент командной строки 'cpan'), модуль' CPANPLUS' (и его эквивалент командной строки 'cpanp') и новое приложение: : дистрибутив cpanminus, который устанавливает 'cpanm'. Из них я считаю, что «cpanm» будет проще всего установить и использовать. 'cpan' и' cpanp' устанавливаются по умолчанию, но для правильной работы требуется значительная настройка. –

+0

404: Запрошенный URL/запись/статьи/install-perl-modules-without-root не найден на этом сервере. – harschware

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

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

export MANPATH=$HOME/Library/perl5/man:$MANPATH' >> ~/.bash_profile 
Смежные вопросы