not*_*bit 7 perl cygwin cpan cpanm
我最近在安装一些模块时遇到了一些问题,并且我惊讶地发现许多已经安装的模块都有重复的安装和版本.试图跟踪标准(如果有这样的东西)安装使用的东西cpanm,我发现以下结果非常混乱.
报告显示了这些位置:
cpan -V:# 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
Run Code Online (Sandbox Code Playgroud)
perl -V:.*site.*:# 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';
Run Code Online (Sandbox Code Playgroud)
@INC:# 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
Run Code Online (Sandbox Code Playgroud)
结果是cpan-outdated -p --verbose显示一个完全不同(和更短)的过时模块列表cpan -lO.毋庸置疑,模块安装在整个地方,我不知道如何理解是否存在默认安装位置以及它应该去哪里,或者应该去哪里.
问题:
core,vendor以及site 类型的路径?这些安装位置的最佳参考可能是ExtUtils :: MakeMaker文档,用于安装内容.在本质上:
core(也称为privlib) - 与Perl一起安装的核心模块.在早于5.12的Perls上,双生命模块的更新也需要安装在核心版本上,而不是安装到站点或供应商lib中,因为privlib @INC在5.12之前排在第一位.这在Perl系统中尤其危险,其中privlib中的文件通常由包管理器管理.vendor - 是分发供应商可以安装模块的地方.这通常是系统包管理器安装非核心模块的地方.site - 是CPAN客户端在直接调用时安装模块的地方,除了如上所述的双生命模块之外的异常配置.(双寿命模块是核心模块,也可以在CPAN上单独使用,这意味着您可以安装更新版本.)
这些lib位置中的每一个都有一个arch变体,即安装了特定于构建的输出文件的发行版.没有动态配置的pure-perl发行版安装在标准体系结构无关的目录中,并且通常可以在Perl和体系结构的其他安装中不加修改地运行,只要它们的要求仍然满足(尽管除非你真的知道你是什么,否则它不是一个好主意这样做).任何已编译的XS模块的分发或在构建过程中动态生成模块的分发都安装在arch目录中,并且从另一个Perl使用是不安全的.
所有这些位置都是在构建Perl时配置的,并且可以使用perl -V您显示的选项进行发现.它们每个都有附带的script和bin目录(通常是相同的)和联机帮助页的目录.
至于差异cpan-outdated- 这个工具(就像许多使用ExtUtils :: Installed的工具一样)仅限于查找具有包列表的模块,这些模块在使用CPAN客户端安装模块时包含,但不包含核心模块,并且它们通常被剥离供应商包.所以很可能cpan-outdated只会发现sitelib中的模块,但这通常是你需要找到的.我不确定cpan命令使用什么机制.