Я хочу установить модули жемчуга на общем сервере, на котором у меня нет корневого доступа. Как я могу сделать это? У них также, кажется, есть более старая версия CPAN (он жалуется на то, что при выполнении команды), действительно ли возможно обновить команду CPAN, используемую из моей учетной записи, не требуя корневого доступа?
Самый простой метод, который я нашел до сих пор, это сказать
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-страницы для ваших локальных модулей.
http://novosial.org/perl/life-with-cpan/non-root/
Основной шаг в обоих наборах инструкций включает модуль local::lib
AFAIK, логика CPAN содержится в модуле Perl (CPAN.pm), что означает, что вы также можете легко установить новый модуль в свой локальный каталог, как и любой другой модуль Perl.
Также, после установки модулей в нестандартное место, проверьте эти два вопроса о загрузке библиотек из нестандартных мест (часть информации уже доступна в ссылке выше):
Как программа Perl узнает, где найти файл, содержащий используемый ею модуль Perl?
Как строится @INC Perl? (aka Какие есть все способы повлиять на то, где будут искаться модули Perl?)