使用CPAN在多个目录中安装Perl模块时,如何将其安装到特定目录?

3

运行以下命令会返回多条路径:

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

每个路径都安装了模块。我想以root身份将模块安装到以下目录中:

/usr/local/share/perl5

我应该运行哪些命令来查找cpan当前安装模块的位置?如果不是上面显示的路径,该如何修改它?


1
我可能会使用local::lib(或者至少检查它是如何实现的)。 - melpomene
2个回答

3

以下是我如何配置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 的模块。

我该如何发出这些命令以查看它们当前指向哪里? - PaulM
o conf(全部)或 o conf {name} 将显示当前值,可能为空白。使用 perl -V:'.*inst.*' 查看 perl 默认使用的目录。 - ikegami
@ikegami sitelib='/usr/local/share/perl5';installsitelib='/usr/local/share/perl5'; makepl_arg [INSTALLDIRS=site] mbuildpl_arg [--installdirs site] 这是指向 /usr/local/share/perl5 的吗? - PaulM
以上内容对我来说并没有达到预期效果。我发现当我从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中安装,我需要设置这些变量为什么值? - Michael Grant

0

你也可以通过 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接