Il y a quelques modules Perl que j'utilise souvent sur mes systèmes * nix (FreeBSD, Linux, Mac). Je les installe toujours depuis cpan. Plus tôt cette année, j'avais besoin d'en utiliser certains sur un système Windows 64 bits, et en environ 2 heures, j'ai installé le package Strawberry Perl le plus récent, et à partir de cpan, j'ai installé les modules de mon désir de la même manière que je utilisé pour faire sous * nix. Tout a fonctionné comme prévu.
Sur un autre système Windows 64 bits, j'essaie maintenant de configurer un environnement cygwin64 au lieu d'installer Strawberry Perl. Il y a une poignée d'outils dont nous avons besoin sur ce système, et ceux-ci fonctionnent déjà très bien sous cygwin64, donc cela semble être une bonne idée d'ajouter la nouvelle fonctionnalité Perl à l'environnement cygwin64 déjà existant. Pour tester cette possibilité sans perturber l'environnement de production, j'effectue des configurations d'essai / erreur sur un système Windows propre et distinct.
J'ai téléchargé le programme d'installation cygwin64 maintenant actuel et je peux obtenir tous les outils dont nous avons besoin dans le passé s'est bien installé. Je peux également installer perl5. Mais l'installation de modules via "cpan install" ne fonctionne pas. Malheureusement, je ne suis pas vraiment au courant des paquets * nix dont dépend cpan, car tous sur mes unices (et apparemment avec Strawberry Perl sous Windows aussi) chaque dépendance est installée automatiquement, et je n'ai jamais eu à m'en soucier. Mon environnement cygwin64 manque évidemment certains paquets requis par le processus de construction exécuté par cpan. Mais cpan dans cygwin64 fait un très mauvais travail de communication de ce qui manque ou de ce qui ne va pas.
J'ai essayé d'installer plusieurs combinaisons de clang, gcc, mingw et d'autres outils de développement en utilisant le programme d'installation de cygwin, mais je n'ai toujours pas pu obtenir le fonctionnement de "cpan install desire :: module". En fonction du mélange de paquets que j'ai utilisé, j'obtiens différentes erreurs (ou signes d'erreurs).
Comme point de départ assez fiable, pourriez-vous s'il vous plaît me donner une liste de paquets cygwin que je devrais très certainement installer, dans afin d'avoir un environnement où "cpan install ..." est censé réussir.
Ajout n ° 1:
Si j'installe uniquement les packages cygwin les plus basiques (zsh , perl) et ceux qui viennent quand même, je me retrouve avec ça ...
$scalar .= ($what // '');
Tout élément de make, gmake, cmake, nmake, gcc, clang donne une commande " not found "response.
Démarrer cpan fait ceci ...
BEGIN { my $scalar = ''; sub _hook_into_CPANpm_report { no warnings 'redefine'; *CPAN::Shell::myprint = sub { my($self,$what) = @_; $scalar .= $what;
et que la ligne" Press SPACE and ENTER "continue de remplir mon écran jusqu'à ce que j'appuie sur Ctrl + C.
Alors, je redémarre l'installateur Cygwin et installe le paquet devel / make. De cette façon, j'ai ceci ...
$ 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
Cette fois, il n'y a pas d'avertissement concernant "make" manquant, mais la même ligne "Press SPACE and ENTER" remplit l'écran. Il y a toujours ce "$ what non initialisé", et l'avertissement de ne pas avoir les autorisations appropriées sur les dossiers. Ce que j'ai vu dans les questions des autres, généralement corrigé en réinstallant le paquet perl avec le plus récent (j'ai le plus récent).
Alors, quel paquet me manque-t-il? Ou ai-je fait un mauvais choix ci-dessus en acceptant la valeur par défaut? Remarque: j'ai installé des packages de développement supplémentaires avec mes tentatives précédentes. Mais pour garder les choses simples pour le moment, je n'ai que "perl" et "make".
Ajout # 2
Suite aux réponses de HÃ ¥ kon et mob, je redémarré le programme d'installation de cygwin et installé les packages recommandés. Alors maintenant, j'ai installé devel / binutils, devel / clang, devel / cmake, devel / gcc-core, devel / gcc-g ++, gccmakedep et make. Aussi disponible est curl, qui était déjà présent donc je n'ai pas besoin d'installer (peut-être venu comme une dépendance).
Malheureusement, j'obtiens toujours ceci au démarrage de "cpan":
$ 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
Concernant l'avertissement $ what: Les lignes 660 à 670 de Cpan.pm vont comme ceci ...
$ 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
Je peux me débarrasser de l'avertissement en modifiant la ligne 669 en ceci ...
XXX
... mais cela ne résout pas le problème de savoir pourquoi $ what n'est pas défini de toute façon. Cependant, je finis toujours par voir que "Appuyez sur ESPACE et ENTRÉE pour désactiver la boucle" remplissant l'écran. Et la même chose se produit si je tape "manual" et appuie sur Entrée au lieu d'accepter l'option local :: lib par défaut.
3 Réponses :
En vous basant sur votre sortie cpan
, vous pouvez essayer d'utiliser le programme d'installation de Cygwin pour installer les packages supplémentaires suivants avant de réexécuter cpan
:
ALERTE: 'make' est un outil essentiel pour construire des modules perl.
-> installer le paquet make
.
Appuyez sur ESPACE et ENTRÉE pour désactiver curl
, installez le package curl
. De plus, je pense que les packages gcc
et gcc-g ++
sont nécessaires à l'installation de nombreux modules CPAN. Ensuite, libcrypt-devel
peut être requis pour les choses liées à SSH, et libreadline-devel
est agréable à avoir pour le rappel de l'historique dans la fenêtre du terminal Cygwin.
libgmp-devel
. J'ajouterai plus au fur et à mesure que je reçois des commentaires de votre part :) Basé sur mon propre ensemble de packages installés et ma mémoire pour savoir lesquels sont utiles dans la chaîne d'outils cpan:
binutils bzip2 clang cmake gcc-core gcc-g++ gccmakedep make curl and/or wget
Utilisez la configuration cygwin pour installer les modules cpan lorsqu'il existe un package cygwin pour le module. Je pense que vous pouvez ensuite utiliser cpan pour mettre à niveau le module. Obtenez votre liste de modules requis et recherchez-les dans la configuration. Ensuite, installez le reste de vos modules requis à l'aide de cpan. C'est un processus itératif. Ma compréhension limitée est que cela est nécessaire lorsqu'un portage vers cygwin est nécessaire pour installer le module, mais le module cpan en amont n'inclut pas ce portage. Pour plus d'informations, demandez sur la liste de diffusion cygwin,
Les choses ont pris une tournure intéressante. J'ai remarqué que même si j'avais curl depuis le tout début (fourni avec l'environnement cygwin par défaut le plus basique), je ne l'ai jamais installé (pas via l'installateur cygwin).
keve@cygtest ~ $ 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/keve/.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] Autoconfiguration complete. Attempting to bootstrap local::lib... Writing /home/keve/.cpan/CPAN/MyConfig.pm for bootstrap... commit: wrote '/home/keve/.cpan/CPAN/MyConfig.pm' Fetching with HTTP::Tiny: http://www.cpan.org/authors/01mailrc.txt.gz Reading '/home/keve/.cpan/sources/authors/01mailrc.txt.gz' ............................................................................DONE Fetching with HTTP::Tiny: http://www.cpan.org/modules/02packages.details.txt.gz Reading '/home/keve/.cpan/sources/modules/02packages.details.txt.gz' Database was generated on Sat, 01 Jun 2019 09:17:02 GMT HTTP::Date not available ............. New CPAN.pm version (v2.26) available. [Currently running version is v2.18] You might want to try install CPAN reload cpan to both upgrade CPAN.pm and run the new version without leaving the current session. ...............................................................DONE Fetching with HTTP::Tiny: http://www.cpan.org/modules/03modlist.data.gz Reading '/home/keve/.cpan/sources/modules/03modlist.data.gz' DONE Writing /home/keve/.cpan/Metadata Fetching with HTTP::Tiny: http://www.cpan.org/authors/id/H/HA/HAARG/local-lib-2.000024.tar.gz Fetching with HTTP::Tiny: http://www.cpan.org/authors/id/H/HA/HAARG/CHECKSUMS Checksum for /home/keve/.cpan/sources/authors/id/H/HA/HAARG/local-lib-2.000024.tar.gz ok 'YAML' not installed, will not store persistent state Configuring H/HA/HAARG/local-lib-2.000024.tar.gz with Makefile.PL Attempting to create directory /home/keve/perl5 Checking if your kit is complete... Looks good Generating a Unix-style Makefile Writing Makefile for local::lib Writing MYMETA.yml and MYMETA.json HAARG/local-lib-2.000024.tar.gz /usr/bin/perl Makefile.PL --bootstrap -- OK Running make for H/HA/HAARG/local-lib-2.000024.tar.gz cp lib/local/lib.pm blib/lib/local/lib.pm cp lib/POD2/PT_BR/local/lib.pod blib/lib/POD2/PT_BR/local/lib.pod cp lib/POD2/DE/local/lib.pod blib/lib/POD2/DE/local/lib.pod cp lib/lib/core/only.pm blib/lib/lib/core/only.pm Manifying 4 pod documents HAARG/local-lib-2.000024.tar.gz /usr/bin/make -- OK Running make test PERL_DL_NONLAZY=1 "/usr/bin/perl.exe" "-I/home/keve/perl5/lib/perl5" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib/lib', 'blib/arch')" t/*.t t/bad_variables.t ...... ok t/carp-mismatch.t ...... ok t/classmethod.t ........ ok t/de-dup.t ............. ok t/lib-core-only.t ...... ok t/pipeline.t ........... ok t/shell.t .............. ok t/stackable.t .......... ok t/subroutine-in-inc.t .. ok t/taint-mode.t ......... ok All tests successful. Files=10, Tests=172, 29 wallclock secs ( 0.03 usr 0.17 sys + 4.24 cusr 11.30 csys = 15.74 CPU) Result: PASS HAARG/local-lib-2.000024.tar.gz /usr/bin/make test -- OK Running make install Manifying 4 pod documents Installing /home/keve/perl5/lib/perl5/lib/core/only.pm Installing /home/keve/perl5/lib/perl5/local/lib.pm Installing /home/keve/perl5/lib/perl5/POD2/DE/local/lib.pod Installing /home/keve/perl5/lib/perl5/POD2/PT_BR/local/lib.pod Installing /home/keve/perl5/man/man3/lib.core.only.3pm Installing /home/keve/perl5/man/man3/local.lib.3pm Installing /home/keve/perl5/man/man3/POD2.DE.local.lib.3pm Installing /home/keve/perl5/man/man3/POD2.PT_BR.local.lib.3pm Appending installation info to /home/keve/perl5/lib/perl5/x86_64-cygwin-threads-multi/perllocal.pod HAARG/local-lib-2.000024.tar.gz /usr/bin/make install -- OK local::lib is installed. You must now add the following environment variables to your shell configuration files (or registry, if you are on Windows) and then restart your command line shell and CPAN before installing modules: PATH="/home/keve/perl5/bin${PATH:+:${PATH}}"; export PATH; PERL5LIB="/home/keve/perl5/lib/perl5${PERL5LIB:+:${PERL5LIB}}"; export PERL5LIB; PERL_LOCAL_LIB_ROOT="/home/keve/perl5${PERL_LOCAL_LIB_ROOT:+:${PERL_LOCAL_LIB_ROOT}}"; export PERL_LOCAL_LIB_ROOT; PERL_MB_OPT="--install_base \"/home/keve/perl5\""; export PERL_MB_OPT; PERL_MM_OPT="INSTALL_BASE=/home/keve/perl5"; export PERL_MM_OPT; Would you like me to append that to /home/keve/.bashrc now? [yes] commit: wrote '/home/keve/.cpan/CPAN/MyConfig.pm' You can re-run configuration any time with 'o conf init' in the CPAN shell Terminal does not support AddHistory. cpan shell -- CPAN exploration and modules installation (v2.18) Enter 'h' for help. cpan[1]>
Et il y a un package curl disponible pour marquer pour l'installation. J'ai donc installé Net / curl via la configuration de cygwin, puis j'ai obtenu ceci.
keve@cygtest ~ $ which curl /usr/bin/curl keve@cygtest ~ $ curl --version curl 7.65.0 (x86_64-pc-cygwin) libcurl/7.65.0 OpenSSL/1.1.1b zlib/1.2.11 brotli/1.0.7 libidn2/2.0.4 libpsl/0.18.0 (+libidn2/2.0.2) libssh/0.8.7/openssl/zlib nghttp2/1.37.0 Release-Date: 2019-05-22 Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp Features: AsynchDNS brotli Debug GSS-API HTTP2 HTTPS-proxy IDN IPv6 Kerberos Largefile libz Metalink NTLM NTLM_WB PSL SPNEGO SSL TLS-SRP TrackMemory UnixSockets keve@cygtest ~ $ which -a curl /usr/bin/curl /cygdrive/c/Windows/system32/curl
À ce stade, cpan n'a plus imprimé le message «Appuyez sur ESPACE et ENTRÉE pour désactiver curl», mais a commencé à se comporter comme prévu.
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 keve@cygtest ~ $ which curl /cygdrive/c/Windows/system32/curl
Et maintenant, je peux commencer à construire des modules par la méthode habituelle "installer désiré :: package". Alors j'ai finalement atteint ce que je voulais. Fait intéressant, chaque module que je voulais créer n'a pas pu être créé. Mais au moins, ils ont échoué d'une manière que je connais depuis * nix. Donc c'est maintenant un autre problème pour un autre jour.
Pour répondre à ma question initiale: pour obtenir un "cpan" fonctionnel sous cygwin, vous devez installer au moins ces paquets. . .
Le dernier, Net / curl est extrêmement important. Parce que l'environnement cygwin de base a déjà une boucle fonctionnelle, mais "cpan" ne fonctionne pas avec cela. Vous devez installer le package Net / curl via la configuration cygwin. Cela éliminera les messages "Appuyez sur ESPACE et ENTREE pour désactiver la boucle" qui remplissent la fenêtre lors de l'exécution de "cpan".
Génial! Veuillez signaler ce résultat sur le suivi des problèmes afin que le comportement de cpan
soit Cygwin peut être amélioré pour les futurs utilisateurs.
Ce fil aide-t-il en quelque sorte? stackoverflow.com/ questions / 10483574 /…
Je suppose que cela dépend beaucoup des modules CPAN que vous souhaitez installer. Il peut être difficile de couvrir tous les packages possibles sur CPAN. Même sur un système Linux, vous devez souvent installer des bibliothèques de développement pour pouvoir installer un module CPAN.
Pouvez-vous afficher les messages de sortie ou d'erreur? Pour ce que ça vaut, j'ai écrit
cpan
.@Skeeve, ce fil est utile en présentant des moyens de surmonter mon problème. Mais il le fait en s'écartant de la méthode "cpan install ..." que j'essaie de faire fonctionner. C'est la seule façon dont j'ai installé des modules auparavant, et je préfère utiliser la même méthode sous cygwin64, au lieu d'apprendre à utiliser une méthode différente pour cet environnement.
@Brian, je connais déjà votre nom. Je ne savais pas que vous aviez écrit cpan, mais vos commentaires m'ont aidé avec mes questions perl ici avant et je vous vois souvent résoudre ou aider / améliorer de manière constructive les questions perl des autres ici. J'essayais d'éviter de publier un message de sortie / d'erreur à ce stade, car je viens de manquer un paquet très trivial et j'espérais ne pas avoir l'air aussi stupide que je pourrais l'être. Mais votre approche est parfaitement logique, alors essayons de créer mon environnement à partir de zéro! Voir l'ajout n ° 1.
Je pense que l'erreur
$ what
est inoffensive et disparaîtra si vous mettez à jourcpan
lui-même (cpan CPAN
)@Skeeve, cela n'aide pas. Ils essaient de configurer
cpan
afin de pouvoir exécuter des commandes telles que celles des questions-réponses que vous avez liées.Re " Vous n'avez pas la permission d'écrire pour les répertoires de bibliothèque Perl. " Cela me semble bizarre. Cygwin a-t-il été installé par un autre utilisateur que vous? Si ce n'était pas pour ça, je vous dirais d'éviter local :: lib.
"Appuyez sur ESPACE et ENTRÉE pour désactiver curl" Vous devrez peut-être installer
libcurl-devel
oulibcurl4
pour résoudre ce problèmelibcurl4 était déjà installé. Doit être venu en tant que dépendance avec l'un des packages que j'ai installés précédemment.