Установите модули Perl с помощью CPAN в определенный каталог, когда несколько из них используются

Выполнение следующей команды возвращает несколько путей:

perl -e 'print join("\n",@INC,"")'

Внутри каждого пути установлены модули. Я хотел бы установить модули как root в следующий каталог:

/usr/local/share/perl5

Какие команды мне нужно запустить, чтобы узнать, где cpan, как root, в настоящее время устанавливает модули? Как мне изменить его, если это не тот путь, который показан выше?


person PaulM    schedule 16.08.2018    source источник
comment
Я бы, вероятно, просто использовал local :: lib (или, по крайней мере, проверил, как он это делает) .   -  person melpomene    schedule 17.08.2018


Ответы (2)


Вот как я настроил cpan для помещения всех новых модулей в определенный каталог:

o conf makepl_arg 'PREFIX=/usr/local/share/perl5 INSTALLMAN3DIR=/usr/local/share/perl5/man/man3'
o conf mbuild_arg '--install_base /usr/local/share/perl5'
o conf mbuild_install_arg '--install_base /usr/local/share/perl5'
o conf mbuildpl_arg '--install-base /usr/local/share/perl5'
[o conf commit]

В первой строке адресуются модули, использующие ExtUtils::MakeMaker, а в следующих трех строках - модули, использующие Module::Build.

person mob    schedule 16.08.2018
comment
Как мне выполнить эту команду, чтобы увидеть, на что они указывают в данный момент? - person PaulM; 16.08.2018
comment
o conf (все) или o conf {name} покажет текущее значение, которое, вероятно, пустое. Используйте perl -V:'.*inst.*' для каталогов, которые perl будут использовать по умолчанию - person ikegami; 16.08.2018
comment
@ikegami sitelib = '/ usr / local / share / perl5'; installsitelib = '/ usr / local / share / perl5'; makepl_arg [INSTALLDIRS = site] mbuildpl_arg [--installdirs site] Указывает ли это на / usr / local / share / perl5? - person PaulM; 16.08.2018
comment
Вышеупомянутое не совсем сработало для меня. Я заметил, что когда я устанавливал модуль из CPAN, он устанавливал его в /usr/local/share/perl/5.30.3. Но меня беспокоит, что когда Perl будет обновлен через apt, этот модуль останется позади. Итак, я подумал, может быть, мне стоит установить модули где-нибудь подольше, например, в / usr / share / perl5. Поэтому я изменил PREFIX и install_base на указанные выше. Но когда я установил Mail :: DMARC, он установил его в / usr / share / perl5 / lib / perl5 / Mail / DMARC! Что мне нужно установить для этих переменных для установки в / usr / share / perl5? - person Michael Grant; 14.11.2020

Вы также можете легко сделать это с помощью App :: cpm.

 $ cpm install -L my-random-folder Open::This

 DONE install Path-Tiny-0.108 (using prebuilt)
 DONE install Try-Tiny-0.30 (using prebuilt)
 DONE install Module-Build-0.4224 (using prebuilt)
 DONE install Module-Runtime-0.016 (using prebuilt)
 DONE install Open-This-0.000008 (using prebuilt)
 5 distributions installed.

 $ tree my-random-folder
 my-random-folder
 ├── bin
 │   ├── config_data
 │   └── ot
 └── lib
      └── perl5
           ├── 5.26.1
           │   └── darwin-2level
           ├── Module
           │   ├── Build
           │   │   ├── API.pod
           │   │   ├── Authoring.pod
           │   │   ├── Base.pm
           │   │   ├── Bundling.pod
           │   │   ├── Compat.pm
           │   │   ├── Config.pm
           │   │   ├── ConfigData.pm
           │   │   ├── Cookbook.pm
           │   │   ├── Dumper.pm
           │   │   ├── Notes.pm
           │   │   ├── PPMMaker.pm
           │   │   ├── Platform
           │   │   │   ├── Default.pm
           │   │   │   ├── MacOS.pm
           │   │   │   ├── Unix.pm
           │   │   │   ├── VMS.pm
           │   │   │   ├── VOS.pm
           │   │   │   ├── Windows.pm
           │   │   │   ├── aix.pm
           │   │   │   ├── cygwin.pm
           │   │   │   ├── darwin.pm
           │   │   │   └── os2.pm
           │   │   └── PodParser.pm
           │   ├── Build.pm
           │   └── Runtime.pm
           ├── Open
           │   └── This.pm
           ├── Path
           │   └── Tiny.pm
           ├── Try
           │   └── Tiny.pm
           └── darwin-2level
                └── auto
                     ├── Module
                     │   ├── Build
                     │   └── Runtime
                     ├── Open
                     │   └── This
                     ├── Path
                     │   └── Tiny
                     └── Try
                          └── Tiny
person oalders    schedule 17.08.2018