Perl: Как быть с дублированной установкой модулей?

Я новичок в Perl и наткнулся на двойную установку модулей.

Я заново установил Strawbery 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

person Miroslav Popov    schedule 06.08.2019    source источник


Ответы (1)


Все работает как положено.


Существует три набора мест установки: ядро, поставщик и сайт.

Каталоги поставщиков обычно используются менеджерами пакетов дистрибутивов Linux, но похоже, что Strawberry Perl включает в свой дистрибутив ряд неосновных модулей (включая Mojolicious) и помещает их в каталоги поставщиков. Это правильно.[1]

Каталоги сайта используются для модулей, установленных пользователем. Итак, ваш обновленный Mojolicious был установлен в каталоги сайта. Это правильно.

(Подробнее о различиях здесь.)

Это не проблема, потому что каталоги сайтов размещаются перед каталогами поставщиков в @INC, поэтому версия модуля, установленная пользователем, находится перед версией, установленной поставщиком.


  1. Использование каталогов сайта, вероятно, также было бы уместно, поскольку Strawberry Perl не предоставляет способа управления пакетами дистрибутивов. Но использование каталогов поставщиков наверняка будет безопасным.
person ikegami    schedule 06.08.2019