2010-09-17 8 views
32

Я нахожусь на машине Linux, где у меня нет прав root. Я хочу установить некоторые пакеты через CPAN в мой домашний каталог, чтобы при запуске Perl он сможет его увидеть.Как установить модули Perl без привилегий root?

Я запустил cpan, который попросил варианты настройки. Он попросил какой-то каталог, который предложил ~/perl «для пользователей без полномочий». Тем не менее, когда я пытаюсь установить пакет, он не работает на этапе make install, потому что у меня нет доступа на запись к /usr/lib/perl5/whatever.

Как настроить CPAN, чтобы я мог устанавливать пакеты в мой домашний каталог?

+1

Возможный дубликат [Как использовать CPAN как пользователя, не являющегося пользователем root?] (Http://stackoverflow.com/questions/2980297/how-can-i-use-cpan-as-a-non-root -user) – Ether

+0

@Ether. Согласен. Я бы также рекомендовал perlbrew, о котором упоминается в вопросе «Как я могу установить версию Perl под своим домом, используя perlbrew?» http://stackoverflow.com/questions/3733482/how-do-ininstall-cpan-modules-while-using-perlbrew –

+0

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

ответ

24

См. local::lib.

После того, как вы установили его, вы можете сделать:

perl -MCPAN -Mlocal::lib -e 'CPAN::install(LWP)'

+0

Не работает: 'mkdir /root/.cpan: Разрешение отклонено в/usr/lib/perl5/5.8.5/CPAN.pm строка 2342'. Любой способ проверить правильность установки local :: lib? –

+0

[Поддержка 'local :: lib' была добавлена ​​в' CPAN.pm' в 2011 году (https://metacpan.org/changes/distribution/CPAN#L389). 'perl' 5.8.5 был выпущен в 2004 году (https://perldoc.perl.org/perlhist.html). В этом и заключается проблема. –

25

Там в путь документированы в perlfaq8, что и local::lib делает для вас.

Это также часто задаваемые StackOverflow вопрос:

Curiosuly, ни один из них не предлагается, когда я использую свой оригинальный заголовок вопроса (который является одной из причин, хорошее название очень важно найти ответ на свой вопрос).


Как сохранить свой собственный каталог модулей/библиотек?

При создании модулей скажите Perl, где устанавливать модули.

Если вы хотите установить модули для собственного использования, самым простым способом может быть локальный :: lib, который вы можете загрузить из CPAN. Он устанавливает для вас различные параметры установки и использует те же настройки в ваших программах.

Если вам нужна большая гибкость, вам необходимо настроить свой CPAN-клиент для конкретной ситуации.

Для распределений Makefile.PL основы, используйте опцию INSTALL_BASE при создании Makefiles:

perl Makefile.PL INSTALL_BASE=/mydir/perl 

Вы можете установить это в вашей конфигурации CPAN.pm так модули автоматически установить в вашей частной директории библиотеки, когда вы используете CPAN.вечера оболочки:

% cpan 
cpan> o conf makepl_arg INSTALL_BASE=/mydir/perl 
cpan> o conf commit 

Для распределений Build.PL основе, используйте --install_base вариант:

perl Build.PL --install_base /mydir/perl 

Вы можете настроить CPAN.pm автоматически использовать этот вариант тоже:

% cpan 
cpan> o conf mbuild_arg "--install_base /mydir/perl" 
cpan> o conf commit 

INSTALL_BASE сообщает, что эти инструменты помещают ваши модули в/mydir/perl/lib/perl5. См. Как добавить каталог в мой путь включения (@INC) во время выполнения? для получения подробных сведений о том, как запускать новые модули.

Существует одна оговорка с INSTALL_BASE, хотя она действует иначе, чем настройки PREFIX и LIB, которые поддерживали более старые версии ExtUtils :: MakeMaker. INSTALL_BASE не поддерживает установку модулей для нескольких версий Perl или разных архитектур в одном каталоге. Вы должны подумать, хотите ли вы этого, и если да, используйте более старые настройки PREFIX и LIB. Дополнительную информацию см. В документации ExtUtils :: Makemaker.

Смежные вопросы