首页 > 解决方案 > Perl:如何处理重复的模块安装?

问题描述

我是 Perl 的新手,偶然发现了双模块安装。

我在. _ Windows 10之后,我尝试使用此答案中提出的命令一次更新所有模块;:

cpan-outdated -p | cpanm

不幸的是,似乎更新可能安装在另一个位置:

whichpm -a Mojolicious
C:\Strawberry\perl\site\lib\Mojolicious.pm
C:\Strawberry\perl\vendor\lib\Mojolicious.pm


whichpm -v Mojolicious
whichpm: WARNING: DUPLICATE module files found for 'Mojolicious':
  C:\Strawberry\perl\vendor\lib\Mojolicious.pm
Mojolicious     8.22    (non-core)      C:\Strawberry\perl\site\lib\Mojolicious.pm

遇到这种情况怎么办?

在进一步更新中如何防止此类情况?

perl -wE "say for @INC"

C:/Strawberry/perl/site/lib/MSWin32-x64-multi-thread
C:/Strawberry/perl/site/lib
C:/Strawberry/perl/vendor/lib
C:/Strawberry/perl/lib

标签: strawberry-perlperlcpanm

解决方案


一切都按预期工作。


共有三组安装位置:核心、供应商和站点。

供应商目录通常由 linux 发行版的包管理器使用,但似乎 Strawberry Perl 在其发行版中包含许多非核心模块(包括 Mojolicious)并将这些放在供应商目录中。这是正确的。[1]

站点目录用于用户安装的模块。因此,您升级后的 Mojolicious 已安装到站点目录中。这是正确的。

(更多关于这里的差异。)

这不是问题,因为站点目录放在供应商目录之前@INC,因此在供应商安装版本之前找到了用户安装的模块版本。


  1. 使用站点目录可能也很好,因为 Strawberry Perl 没有提供管理它捆绑的发行版的方法。但是使用供应商目录肯定是安全的。

推荐阅读