我最近在安装某些模块时遇到了一些麻烦,并惊讶地发现许多已安装的模块都有重复的安装和版本。尝试使用以下命令跟踪标准(如果有这样的东西)安装中的内容cpanm
,我发现以下结果非常令人困惑。
报告显示了这些位置:
# cpan -V
/usr/bin/cpan script version 1.672, CPAN.pm version 2.22
--------------------------------------------------
Checking install dirs...
Checking core
+ /usr/share/perl5/5.26
+ /usr/lib/perl5/5.26/x86_64-cygwin-threads
Checking vendor
+ /usr/share/perl5/vendor_perl/5.26
+ /usr/lib/perl5/vendor_perl/5.26/x86_64-cygwin-threads
Checking site
+ /usr/local/share/perl5/site_perl/5.26
+ /usr/local/lib/perl5/site_perl/5.26/x86_64-cygwin-threads
Checking PERL5LIB
no directories for PERL5LIB
Checking PERLLIB
no directories for PERLLIB
# perl -V:.*site.* |column -t -s "=" |sort -d -i -k 1.22
d_sitearch 'define';
usesitecustomize 'undef';
siteprefix '/usr/local';
siteprefixexp '/usr/local';
installsitebin '/usr/local/bin';
installsitescript '/usr/local/bin';
sitebin '/usr/local/bin';
sitebinexp '/usr/local/bin';
sitescript '/usr/local/bin';
sitescriptexp '/usr/local/bin';
installsitearch '/usr/local/lib/perl5/site_perl/5.26/x86_64-cygwin-threads';
sitearch '/usr/local/lib/perl5/site_perl/5.26/x86_64-cygwin-threads';
sitearchexp '/usr/local/lib/perl5/site_perl/5.26/x86_64-cygwin-threads';
installsitehtml1dir '/usr/local/share/doc/perl/html/html1';
sitehtml1dir '/usr/local/share/doc/perl/html/html1';
sitehtml1direxp '/usr/local/share/doc/perl/html/html1';
installsitehtml3dir '/usr/local/share/doc/perl/html/html3';
sitehtml3dir '/usr/local/share/doc/perl/html/html3';
sitehtml3direxp '/usr/local/share/doc/perl/html/html3';
installsiteman1dir '/usr/local/share/man/man1';
siteman1dir '/usr/local/share/man/man1';
siteman1direxp '/usr/local/share/man/man1';
installsiteman3dir '/usr/local/share/man/man3';
siteman3dir '/usr/local/share/man/man3';
siteman3direxp '/usr/local/share/man/man3';
installsitelib '/usr/local/share/perl5/site_perl/5.26';
sitelib '/usr/local/share/perl5/site_perl/5.26';
sitelib_stem '/usr/local/share/perl5/site_perl/5.26';
sitelibexp '/usr/local/share/perl5/site_perl/5.26';
# perl -e 'print join("\n",@INC,"")'
/usr/local/lib/perl5/site_perl/5.26/x86_64-cygwin-threads
/usr/local/share/perl5/site_perl/5.26
/usr/lib/perl5/vendor_perl/5.26/x86_64-cygwin-threads
/usr/share/perl5/vendor_perl/5.26
/usr/lib/perl5/5.26/x86_64-cygwin-threads
/usr/share/perl5/5.26
结果是cpan-outdated -p --verbose
显示与之前完全不同(且更短)的过时模块列表cpan -lO
做。不用说,模块安装在各处,我不知道如何理解是否有默认安装位置及其位置,或者should go.
QUESTION:
- 那么两者有什么区别
core
, vendor
and site
type路径?
- 为什么每种类型有 2 条路径?
这些安装位置的最佳参考可能是ExtUtils::MakeMaker有关安装位置的文档。在本质上:
-
core
(也称为privlib) - 是随 Perl 安装的核心模块所在的位置。在早于 5.12 的 Perls 上,双重生命模块的更新也需要安装在核心版本上,而不是安装到站点或供应商库中,因为 privlib 排在第一位@INC
5.12之前。这在 Perl 系统中尤其危险,其中 privlib 中的文件通常由包管理器管理。
-
vendor
- 是分发供应商可以安装模块的位置。这通常是系统包管理器安装非核心模块的地方。
-
site
- 是 CPAN 客户端在直接调用时安装模块的位置,除非出现异常配置(如上述双寿命模块)。
(双生命模块是核心模块,在 CPAN 上也可以单独使用,这意味着您可以安装更新版本。)
每个库位置都有一个arch
变体,这是安装具有特定于构建的输出文件的发行版的位置。没有动态配置的纯 Perl 发行版被安装到标准的与体系结构无关的目录中,并且通常可以在 Perl 和体系结构的其他安装中未经修改地运行,只要它们的要求仍然得到满足(尽管这不是一个好主意,除非你真的知道你是什么正在做)。具有任何已编译 XS 模块或在构建过程中动态生成模块的发行版均安装到arch
目录,并且从另一个 Perl 中使用是不安全的。
所有这些位置都是在构建 Perl 时配置的,并且可以使用perl -V
如您所示的选项。他们还各自有陪伴script
and bin
目录(通常是相同的)和手册页目录。
至于差异cpan-outdated
- 这个工具(像许多使用的工具一样ExtUtils::已安装)仅限于查找具有装箱单,它们在使用 CPAN 客户端安装模块时包含,但不包含在核心模块中,并且通常从供应商软件包中删除。所以最有可能的是cpan-outdated
只会发现模块sitelib,但这通常就是您需要找到的全部内容。我不确定 cpan 命令使用什么机制。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)