В моих системах * nix я часто использую пару модулей perl (FreeBSD, Linux, Mac). Я всегда устанавливаю их из cpan. Ранее в этом году мне нужно было использовать некоторые из них в 64-битной системе Windows, и примерно через 2 часа я установил самый последний на тот момент пакет Strawberry Perl, и из cpan я установил модули по своему желанию так же, как и я. раньше делал под * nix. Все заработало как положено.
В другой 64-битной системе Windows я сейчас пытаюсь настроить среду cygwin64 вместо установки Strawberry Perl. В этой системе нам нужно несколько инструментов, и они уже отлично работают под cygwin64, поэтому неплохо было бы добавить новые функции perl в уже существующую среду cygwin64. Чтобы проверить эту возможность, не вмешиваясь в производственную среду, я выполняю установки проб / ошибок в отдельной чистой системе Windows.
Я скачал текущий установщик cygwin64 и могу получить все инструменты, которые нам требовались в прошлом, и установить нормально. Я также могу установить Perl5. Но установка модулей через "cpan install" не работает.
К сожалению, я не очень осведомлен о пакетах * nix, от которых зависит cpan, потому что все на моих устройствах (и, видимо, с Strawberry Perl под Windows) все зависимости устанавливаются автоматически, и мне никогда не приходилось заботиться об этом.
В моей среде cygwin64 явно отсутствуют некоторые пакеты, необходимые для процесса сборки, выполняемого cpan. Но cpan в cygwin64 делает очень плохую работу, сообщая о том, чего не хватает или что не так.
Я попытался установить несколько комбинаций clang, gcc, mingw и других инструментов разработчика с помощью установщика cygwin, но все еще не смог заставить работать "cpan install требуемый :: модуль". В зависимости от используемой смеси пакетов я получаю разные ошибки (или признаки ошибок).
В качестве довольно надежной отправной точки, не могли бы вы дать мне список пакетов cygwin, которые я, безусловно, должен установить, чтобы иметь среду, в которой "cpan install ..." должен был бы успешно выполняться.
Дополнение # 1:
Если я устанавливаю только самые базовые пакеты cygwin (zsh, perl) и те, которые приходят в любом случае, я в итоге получаю это ...
keve@cygtest ~
$ perl -v
This is perl 5, version 26, subversion 3 (v5.26.3) built for x86_64-cygwin-threads-multi
(with 7 registered patches, see perl -V for more detail)
Copyright 1987-2018, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl". If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.
keve@cygtest ~
$ curl --version
curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL
Release-Date: [unreleased]
Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL
Любой из make, gmake, cmake, nmake, gcc, clang приводит к ответу «команда не найдена».
Запуск cpan делает это ...
$ cpan
Loading internal null logger. Install Log::Log4perl for logging messages
Sorry, we have to rerun the configuration dialog for CPAN.pm due to
some missing parameters. Configuration will be written to
<</home/Valaki/.cpan/CPAN/MyConfig.pm>>
CPAN.pm requires configuration, but most of it can be done automatically.
If you answer 'no' below, you will enter an interactive dialog for each
configuration option instead.
Would you like to configure as much as possible automatically? [yes]
Use of uninitialized value $what in concatenation (.) or string at /usr/share/perl5/5.26/App/Cpan.pm line 669, <STDIN> line 1.
<install_help>
Warning: You do not have write permission for Perl library directories.
To install modules, you need to configure a local Perl library directory or
escalate your privileges. CPAN can help you by bootstrapping the local::lib
module or by configuring itself to use 'sudo' (if available). You may also
resolve this problem manually if you need to customize your setup.
What approach do you want? (Choose 'local::lib', 'sudo' or 'manual')
[local::lib]
ALERT: 'make' is an essential tool for building perl Modules.
Please make sure you have 'make' (or some equivalent) working.
Press SPACE and ENTER to disable curl
Press SPACE and ENTER to disable curl
Press SPACE and ENTER to disable curl
Press SPACE and ENTER to disable curl
Press SPACE and ENTER to disable curl
Press SPACE and ENTER to disable curl
Press SPACE and ENTER to disable curl
Press SPACE and ENTER to disable curl
Press SPACE and ENTER to disable curl
Press SPACE and ENTER to disable curl
и строка «Нажмите пробел и ENTER» продолжает заполнять мой экран, пока я не нажму Ctrl + C.
Итак, я снова запускаю установщик Cygwin и устанавливаю пакет devel / make. Таким образом, у меня есть это ...
$ make -v
GNU Make 4.2.1
Built for x86_64-unknown-cygwin
Copyright (C) 1988-2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
$ cpan
Loading internal null logger. Install Log::Log4perl for logging messages
Sorry, we have to rerun the configuration dialog for CPAN.pm due to
some missing parameters. Configuration will be written to
<</home/Valaki/.cpan/CPAN/MyConfig.pm>>
CPAN.pm requires configuration, but most of it can be done automatically.
If you answer 'no' below, you will enter an interactive dialog for each
configuration option instead.
Would you like to configure as much as possible automatically? [yes]
Use of uninitialized value $what in concatenation (.) or string at /usr/share/perl5/5.26/App/Cpan.pm line 669, <STDIN> line 1.
<install_help>
Warning: You do not have write permission for Perl library directories.
To install modules, you need to configure a local Perl library directory or
escalate your privileges. CPAN can help you by bootstrapping the local::lib
module or by configuring itself to use 'sudo' (if available). You may also
resolve this problem manually if you need to customize your setup.
What approach do you want? (Choose 'local::lib', 'sudo' or 'manual')
[local::lib]
Press SPACE and ENTER to disable curl
Press SPACE and ENTER to disable curl
Press SPACE and ENTER to disable curl
Press SPACE and ENTER to disable curl
Press SPACE and ENTER to disable curl
Press SPACE and ENTER to disable curl
На этот раз нет предупреждения о том, что "make" отсутствует, но та же самая строка "Press SPACE and ENTER" заполняет экран. Есть еще «неинициализированный $ what» и предупреждение о том, что у вас нет необходимых прав доступа к папкам. То, что я видел в вопросах других, обычно исправлялось переустановкой пакета perl с самым последним (у меня самый последний).
Итак, какой пакет мне не хватает?
Или я сделал неправильный выбор выше, приняв значение по умолчанию?
Обратите внимание: я установил дополнительные пакеты devel с моими предыдущими попытками. Но для простоты пока у меня есть только "perl" и "make".
Дополнение # 2
Следуя ответам Håkon и mob, я снова запустил установщик cygwin и установил рекомендуемые пакеты. Итак, теперь у меня установлены devel / binutils, devel / clang, devel / cmake, devel / gcc-core, devel / gcc-g ++, gccmakedep и make. Также доступен curl, который уже присутствовал, поэтому мне не нужно было устанавливать (возможно, это зависело).
К сожалению, я все еще получаю это при запуске "cpan":
$ cpan
Loading internal null logger. Install Log::Log4perl for logging messages
Sorry, we have to rerun the configuration dialog for CPAN.pm due to
some missing parameters. Configuration will be written to
<</home/Valaki/.cpan/CPAN/MyConfig.pm>>
CPAN.pm requires configuration, but most of it can be done automatically.
If you answer 'no' below, you will enter an interactive dialog for each
configuration option instead.
Would you like to configure as much as possible automatically? [yes]
Use of uninitialized value $what in concatenation (.) or string at /usr/share/perl5/5.26/App/Cpan.pm line 669, <STDIN> line 1.
<install_help>
Warning: You do not have write permission for Perl library directories.
To install modules, you need to configure a local Perl library directory or
escalate your privileges. CPAN can help you by bootstrapping the local::lib
module or by configuring itself to use 'sudo' (if available). You may also
resolve this problem manually if you need to customize your setup.
What approach do you want? (Choose 'local::lib', 'sudo' or 'manual')
[local::lib]
Press SPACE and ENTER to disable curl
Press SPACE and ENTER to disable curl
Относительно предупреждения $ what:
Строки с 660 по 670 Cpan.pm идут так ...
BEGIN {
my $scalar = '';
sub _hook_into_CPANpm_report
{
no warnings 'redefine';
*CPAN::Shell::myprint = sub {
my($self,$what) = @_;
$scalar .= $what;
Я могу избавиться от предупреждения, изменив строку 669 на эту ...
$scalar .= ($what // '');
... но это не решает проблему того, почему $ what все равно не определено. Тем не менее, я по-прежнему вижу, что «Нажмите пробел и ENTER, чтобы отключить скручивание», заполняя экран. И то же самое происходит, если я набираю «manual» и нажимаю «Enter» вместо того, чтобы принять параметр local :: lib по умолчанию.