Как я могу использовать новый модуль Perl без прав на установку?
Вот моя ситуация: я почти ничего не знаю о Perl, но это единственный язык, доступный на портирующем компьютере. У меня есть только права на запись в моей локальной рабочей области, а не на место установки Perl. Мне нужно использовать Perl :: ForkManager модуль из CPAN
Как мне использовать этот Parallel::ForkManager без центральной установки? Есть ли переменная окружения, которую я могу установить, чтобы она находилась?
Спасибо
JD
10 ответов
От perlfaq8: Как мне сохранить мой собственный каталог module/library?:
Когда вы создаете модули, скажите Perl, где устанавливать модули.
Для дистрибутивов на основе Си используйте опцию INSTALL_BASE при генерации Make-файлов:
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
Для дистрибутивов на основе C используйте параметр --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 говорит этим инструментам поместить ваши модули в F. Смотрите L для подробностей о том, как запускать ваши недавно установленные лопатки.
Однако есть одна оговорка с INSTALL_BASE, поскольку она действует не так, как настройки PREFIX и LIB, которые поддерживали более ранние версии ExtUtils::MakeMaker. INSTALL_BASE не поддерживает установку модулей для нескольких версий Perl или разных архитектур в одном каталоге. Вам следует подумать, действительно ли вы этого хотите, и если вы этого хотите, используйте более старые настройки PREFIX и LIB. См. Документацию ExtUtils::Makemaker для получения более подробной информации.
Загрузите пакет формы CPAN в папку:
wget http://search.cpan.org/CPAN/authors/id/S/SZ/SZABGAB/Parallel-ForkManager-1.06.tar.gz
gunzip Parallel-ForkManager-1.06.tar.gz
tar -xvf Parallel-ForkManager-1.06.tar
перед тем, как создать домашнюю папку для хранения локальных модулей, перейдите в загруженную папку и выполните следующие команды:
perl Makefile.PL PREFIX=/home/username/myModules
make
make test
make install
получите путь к ForkManager из установленной папки /home/username/myModules, найдите папку Parallel и получите полный путь к этому.
Теперь в вашем Perl файле положить их в начале
use lib '/home/username/myModules/bin.../Parallel';
use parallel::ForkManager;
- Это должно сделать это.
Проверьте этот пост от Марка Домина
Выдержка:
- Установите PREFIX=X при сборке Makefile
- Установите INSTALLDIRS=vendor и VENDORPREFIX=X при сборке Makefile
- Или, может быть, вместо VENDORPREFIX вам нужно установить INSTALLVENDORLIB или что-то еще
- Или, может быть, вместо того, чтобы устанавливать их при сборке Makefile, вам нужно установить их при запуске цели make install
- Установите LIB=X/lib при сборке Makefile
- Используйте PAR
- Используйте local::lib
Марк также предлагает другое решение в своем блоге, которое требует немного больше места для описания, но сводится к запуску make и make test, но не к make install, а затем к использованию материалов из blib/.
Есть переменная окружения PERL5LIB, и -I
в командной строке, когда дело доходит до использования модуля. Существуют механизмы сообщения CPAN и CPANPLUS.
В вопросе 5 руководства CPAN содержится информация (perldoc CPAN или посмотрите на сам CPAN).
Вы можете использовать -I
(заглавная i) ключ командной строки, за которым следует каталог, в который вы поместите модуль; или попробуйте директиву use lib, за которой следует каталог.
perl Makefile.PL LIB=/my/perl_modules/lib/
make
make install
PERL5LIB=$PERL5LIB:/my/perl_modules/lib/
perl myperlcode.pl
perlbrew
позволяет использовать локальный Perl и устанавливать его пакеты в локальный каталог.
\curl -L https://install.perlbrew.pl | bash
perlbrew init # put this in .bash_profile etc
perlbrew install 5.27.11
perlbrew switch 5.27.11
См. Также https://opensource.com/article/18/7/perlbrew.
Рассмотрите возможность использования cpanminus, предложенного в этом другом потоке