Почему cpanm терпит неудачу в дистрибутивах без надлежащих make-файлов, где успешно работает cpan -i?

775
Chris Betti

Я на Strawberry Perl на Windows 7 64-битной. cpanm не работает, как это для многих пакетов в cpan:

$ cpanm Getopt::Long::Descriptive Fetching http://www.cpan.org/authors/id/R/RJ/RJBS/Getopt-Long-Descriptive-0.097.tar.gz ... OK Configuring Getopt-Long-Descriptive-0.097 ... N/A ! The distribution doesn't have a proper Makefile.PL/Build.PL See C:\Users\me\.cpanm\work\1399608810.1056\build.log for details. 

Тем не менее, cpan -i Getopt::Long::Descriptiveуспешно. Есть идеи почему?


РЕДАКТИРОВАТЬ (вывод build.log)

cpanm (App::cpanminus) 1.7001 on perl 5.018002 built for MSWin32-x64-multi-thread Work directory is C:\Users\me/.cpanm/work/1399608810.1056 You have make C:\strawberry\c\bin\dmake.exe You have LWP 6.05 You have C:\dev\tools\UnxUtils\usr\local\wbin\tar.exe, C:\dev\tools\UnxUtils\usr\local\wbin\gzip.exe and C:\dev\tools\UnxUtils\usr\local\wbin\bzip2.exe You have C:\dev\tools\UnxUtils\usr\local\wbin\unzip.exe Searching Getopt::Long::Descriptive on cpanmetadb ... --> Working on Getopt::Long::Descriptive Fetching http://www.cpan.org/authors/id/R/RJ/RJBS/Getopt-Long-Descriptive-0.097.tar.gz -> OK Unpacking Getopt-Long-Descriptive-0.097.tar.gz Entering Getopt-Long-Descriptive-0.097 META.yml/json not found. Creating skeleton for it. Configuring Getopt-Long-Descriptive-0.097 -> N/A -> FAIL The distribution doesn't have a proper Makefile.PL/Build.PL See C:\Users\me\.cpanm\work\1399608810.1056\build.log for details. 

РЕДАКТИРОВАТЬ (проблема распаковки)

Удивительно, но кажется, что файлы распакованы, но никогда не появляются на диске!

C:\Users\me>cpanm -v --look Getopt::Long::Descriptive cpanm (App::cpanminus) 1.5018 on perl 5.016002 built for MSWin32-x64-multi-thread Work directory is C:\Users\me/.cpanm/work/1399909160.7264 You have make C:\strawberry\c\bin\dmake.exe You have LWP 6.04 You have C:\UnxUtils\usr\local\wbin\tar.exe, C:\UnxUtils\usr\local\wbin\gzip.exe and C:\UnxUtils\usr\local\wbin\bzip2.exe You have C:\UnxUtils\usr\local\wbin\unzip.exe Searching Getopt::Long::Descriptive on cpanmetadb ... --> Working on Getopt::Long::Descriptive Fetching http://www.cpan.org/authors/id/R/RJ/RJBS/Getopt-Long-Descriptive-0.097.tar.gz ... OK Unpacking Getopt-Long-Descriptive-0.097.tar.gz Getopt-Long-Descriptive-0.097 README Changes LICENSE dist.ini META.yml MANIFEST META.json Makefile.PL t descriptive.t shortcircuit.t release pod-syntax.t 000-report-versions-tiny.t Long Descriptive.pm changes_has_content.t Descriptive Opts.pm Usage.pm Entering Getopt-Long-Descriptive-0.097 Entering C:/Users/me/.cpanm/work/1399909160.7264/Getopt-Long-Descriptive-0.097 with C:\Windows\system32\cmd.exe Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. All rights reserved.  C:\Users\me\.cpanm\work\1399909160.7264\Getopt-Long-Descriptive-0.097>dir Volume in drive C is OS Volume Serial Number is 008E-DBB0  Directory of C:\Users\me\.cpanm\work\1399909160.7264\Getopt-Long-Descriptive-0.097  05/12/2014 11:39 AM <DIR> . 05/12/2014 11:39 AM <DIR> .. 0 File(s) 0 bytes 2 Dir(s) 48,360,112,128 bytes free 

РЕДАКТИРОВАТЬ (найдено файлов, на один уровень выше)

C:\Users\me\.cpanm\work\1399909160.7264\Getopt-Long-Descriptive-0.097>cd ..  C:\Users\me\.cpanm\work\1399909160.7264>ls 000-report-versions-tiny.t Makefile.PL Changes Opts.pm Descriptive README Descriptive.pm Usage.pm Getopt-Long-Descriptive-0.097 changes_has_content.t Getopt-Long-Descriptive-0.097.tar.gz descriptive.t LICENSE dist.ini Long pod-syntax.t MANIFEST release META.json shortcircuit.t META.yml t 
1
Это странно, потому что Getopt :: Long :: Descriptive version 0.097 _does_ содержит [Makefile.PL] (https://metacpan.org/source/RJBS/Getopt-Long-Descriptive-0.097/Makefile.PL). Можете ли вы проверить журнал сборки, на который указывает сообщение об ошибке? Edward 10 лет назад 0
Я добавил информацию о build.log. Обратите внимание: каталог Getopt-Long-Descriptive-0.097 в .cpanm \ work \ 1399608810.1056 пуст. Я предполагаю, что cpanm удалил содержимое после неудачной установки? Другие пакеты, которые я установил с этим прогоном, не имеют пустых каталогов. Chris Betti 10 лет назад 0
Так что `build.log` тоже не очень полезен ... Кажется, что-то пошло не так, распаковывая dist. Знаете ли вы, что вы можете запустить `cpanm --look Getopt :: Long :: Descriptive`, чтобы cpanm распаковывал dist для вас? Он перейдет в каталог, в который он распаковал dist, так что вы можете запустить `perl Makefile.PL`,` make` и все такое прочее вручную. Edward 10 лет назад 0
Относительно вывода --look: когда я запускаю wget, gunzip и tar вручную, файлы распаковываются нормально. Chris Betti 10 лет назад 0
Я искал свой жесткий диск и нашел файлы. Они не были распакованы в подкаталог cpanm, в котором они ожидали. Вместо этого они были распакованы в каталог выше. Интересно, если это требование cpan, что пакет отсутствует, или cpanm может быть немного лучше в обнаружении файлов в корне архива. Chris Betti 10 лет назад 0
Я думаю, что здесь что-то еще происходит ... Getopt :: Long :: Descriptive имеет четко определенную [структуру каталогов] (https://metacpan.org/source/RJBS/Getopt-Long-Descriptive-0.097), но на вашем На машине содержимое тарбола попало в плоский список. Теперь я не могу сказать, является ли это ошибкой cpanm или tar, но это начинает выглядеть как ошибка. Edward 10 лет назад 0

1 ответ на вопрос

0
Chris Betti

It turns out UnxUtils tar was at fault in this case. I'm not sure how the Getopt::Long::Descriptive archive was created, but UnxUtils tar flattens the contents when it is unpacked.

On the other hand, GnuWin32 tar handles the archive just fine.