Как я могу установить модули Perl без прав root? - PullRequest
37 голосов
/ 17 сентября 2010

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

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

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

Ответы [ 3 ]

27 голосов
/ 17 сентября 2010

См. local :: lib .

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

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

25 голосов
/ 17 сентября 2010

Есть способ, описанный в perlfaq8 , который local :: lib делает для вас.

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

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


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

Когда вы собираете модули, скажите Perl, где устанавливать модули.

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

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

Для Makefile.В дистрибутивах на основе PL используйте опцию INSTALL_BASE при создании файлов Makefile:

perl Makefile.PL INSTALL_BASE=/mydir/perl

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

% 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.

0 голосов
/ 19 октября 2018

CPAN way

  1. run cpan команда.Если у вас нет настроенного CPAN, сделайте это первым!В противном случае вы увидите приглашение cpan .В этом случае введите look local::lib, и у вас появится новое приглашение оболочки.В этой новой оболочке выполните команду bootstrap , чтобы сконфигурировать и скомпилировать модуль одновременно с приведенным ниже.

    user@host:~/.cpan/build/local-lib-1.004003-UyX2wf$ perl Makefile.PL --bootstrap && make test && make install

  2. Теперь,экспортируйте некоторые переменные:

    Путь, куда local :: lib будет устанавливать вещи

    echo 'eval $(perl -I$index.t/perl5/lib/perl5 -Mlocal::lib)' >> ~/.bashrc

    И переменная Perl, чтобы избежать ввода пользователя

    echo 'export PERL_MM_USE_DEFAULT=1' >> ~/.bashrc

  3. Теперь загрузите ваш bashrc работает

    source ~/.bashrc

  4. Попробуйте установить работает cpan <SOME_VALID_MODULE_NAMESPACE>

Вот и все!Теперь вы можете устанавливать модули, используя cpan без прав root.Но помните, что это будет работать только для ТЕКУЩЕГО ПОЛЬЗОВАТЕЛЯ , включая пользователя root !

cpanminus way

Если у вас установлен этот sysАдминистратор заслуживает пива!

Просто запустите

$ cpanm --local-lib=~/perl5 local::lib && eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib)

Откройте другой терминал и запустите

$ env |grep PERL

Вы должныпосмотрите что-то вроде этого:

PERL5LIB = $ HOME / perl5 / lib / perl5 PERL_MB_OPT = - install_base "$ HOME / perl5"

PERL_LOCAL_LIB_ROOT = $ HOME / perl5

PERL_MM_OPT = INSTALL_BASE = $ HOME / perl5

Но если это не так, экспортируйте переменные следующим образом:

$ echo "export PERL5LIB=\"$HOME/perl5/lib/perl5\"">>~/.bashrc && \ echo "export PERL_MB_OPT=\"--install_base '$HOME/perl5'\">>~/.bashrc && \ echo "export PERL_LOCAL_LIB_ROOT=$HOME/perl5">>~/.bashrc

Наконец, загрузитефайл bashrc и попробуйте установить с помощью команд

source ~/.bashrc

и

cpanm <SOME_VALID_MODULE_NAMESPACE>

Fim!

...