• Publicidad

Cómo añadir rutas a @INC

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Cómo añadir rutas a @INC

Notapor jojulo » 2008-08-12 04:57 @247

HOLA, SOY UNA PERSONA MUY NOVATA EN ESTE TEMA (NO TENGO NI IDEA) Y ME HAN PEDIDO QUE INSTALE UN MÓDULO DE Perl EN MI MÁQUINA. CUANDO INTENTO INSTALARLO ME SALEN VARIOS ERRORES, AUNQUE TODOS ESTÁN RELACIONADOS. EL ERROR ES:

Código: Seleccionar todo
Warning: prerequisite Convert::PEM failed to load: Can't locate Convert/PEM.pm in @INC (@INC contains: /usr/perl5/5.6.1/lib/sun4-solaris-64int /usr/perl5/5.6.1/lib /usr/perl5/site_perl/5.6.1/sun4-solaris-64int /usr/perl5/site_perl/5.6.1 /usr/perl5/site_perl /usr/perl5/vendor_perl/5.6.1/sun4-solaris-64int /usr/perl5/vendor_perl/5.6.1 /usr/perl5/vendor_perl .) at (eval 6) line 3.


POR LO QUE HE VISTO NECESITO INCLUIR LA RUTA DONDE ESTÁ EL MÓDULO EN "@INC" Y NO SÉ CÓMO HACERLO.

MUCHAS GRACIAS DE ANTEMANO A TODOS.
jojulo
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2008-08-12 04:44 @238

Publicidad

Notapor explorer » 2008-08-12 05:17 @261

Bienvenido a los foros de Perl en Español, jojulo.

El error indica que Perl no encuentra el módulo Convert::PEM.

¿Qué sistema operativo estás usando? Si estás en un sistema Unix/Linux, ponte como root y prueba a instalarlo con el comando cpan:

Código: Seleccionar todo
cpan Convert::PEM


Si no tienes instalado el comando cpan, prueba a buscar ese módulo con el programa de gestión de paquetes de software de tu sistema operativo. Si ese módulo no lo encuentras, entonces tendrás que bajarlo desde CPAN y seguir las instrucciones de instalación que el módulo indique.

Si el módulo no lo puedes instalar en el sistema, sino solo en tu propio directorio, debes indicar ese directorio al principio del programa.

Para este caso, te vale con poner al principio:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use lib '/directorio/al/modulo';
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4

Esta línea equivale a la de modificar el valor de @INC.

También puedes hacer eso mismo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
push @INC, '/directorio/al/modulo';
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor jojulo » 2008-08-12 05:39 @277

El sistema operativo que uso es Solaris. Puede que el problema esté en la forma de instalarlo. Tengo la password de root, con lo cual eso no es problema para mi.

Para instalarlo, me bajé el módulo de la página de CPAN, lo descomprimí, y dentro del directorio descomprimido hice "perl Makefile.PL". El módulo que quiero instalar no es este (es Net::SSH::Perl) pero me da problemas con estos módulos, es por las dependencias. He instalado éste pero me dan estos warning con varios módulos que ya he instalado.

¿El comando que me has pasado dónde hay que añadirlo?

Muchas gracias.
jojulo
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2008-08-12 04:44 @238

Notapor explorer » 2008-08-12 06:18 @304

Tienes que intentar que el módulo CPAN haga todo el trabajo de instalación, ya que él se ocupará de las dependencias, compilaciones, test e instalaciones.

En este enlace tienes un explicación muy detallada de la instalación de módulos en Solaris.

El comando que te he comentado, el cpan, debes ejecutarlo desde la línea de comandos del sistema, como si fuera un comando más. Pruébalo. Deberías tenerlo instalado si tienes un Solaris moderno. Y si no, instálalo como se indica en el enlace que te indico.

Si está, entonces para instalar un módulo te vale con hacer un cpan módulo. Muy cómodo. La primera vez te hará una docena de preguntas en cuanto a la instalación, pero son fáciles de responder.

Si no está, prueba entonces con este otro comando: perl -MCPAN -e 'install "módulo"'.

O también puedes entrar en la shell de comandos de CPAN.pm con perl -MCPAN -e 'shell'.

De todas formas, yo miraría antes en el programa gestor de paquetes de software de Solaris, por si algunos de los módulos que necesito ya están empaquetados de esa forma, y así te ahorras la compilación.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor jojulo » 2008-08-13 09:00 @417

Hola de nuevo a todos,

Sigo sin poder instalar el módulo de Perl que necesito, lo peor es que se me están quitando las ganas de empezar a programar en este lenguaje, con lo fácil que parece. :cry:

No puedo instalar con el cpan porque no tengo acceso a Internet desde este equipo.

El módulo que quiero instalar es el Net::SSH::Perl. Este módulo tiene dependencias de otros, entre otros con Crypt-IDEA-1.08. El IDEA.pm está en este directorio (/ssh-perl/Crypt-IDEA-1.08). Para incluir esta ruta en @INC, en la primera línea del Makefile.PL del Net::SSH::Perl, pongo

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use lib qw(/ssh-perl/Crypt-IDEA-1.08 );
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Este módulo ya le he hecho el perl Makefile.PL.

Cuando ejecuto el perl Makefile.PL, dentro del directorio de Net::SSH::Perl me sigue saliendo el siguiente error:

Código: Seleccionar todo
Warning: prerequisite Convert::PEM failed to load: Can't locate Convert/PEM.pm in @INC (@INC contains: /ssh-perl/Crypt-IDEA-1.08 /usr/perl5/5.6.1/lib/sun4-solaris-64int /usr/perl5/5.6.1/lib /usr/perl5/site_perl/5.6.1/sun4-solaris-64int /usr/perl5/site_perl/5.6.1 /usr/perl5/site_perl /usr/perl5/vendor_perl/5.6.1/sun4-solaris-64int /usr/perl5/vendor_perl/5.6.1 /usr/perl5/vendor_perl .) at (eval 6) line 3, <STDIN> line 4.
Warning: prerequisite Crypt:: DH failed to load: Can't locate Crypt/DH.pm in @INC (@INC contains: /ssh-perl/Crypt-IDEA-1.08 /usr/perl5/5.6.1/lib/sun4-solaris-64int /usr/perl5/5.6.1/lib /usr/perl5/site_perl/5.6.1/sun4-solaris-64int /usr/perl5/site_perl/5.6.1 /usr/perl5/site_perl /usr/perl5/vendor_perl/5.6.1/sun4-solaris-64int /usr/perl5/vendor_perl/5.6.1 /usr/perl5/vendor_perl .) at (eval 7) line 3, <STDIN> line 4.
Warning: prerequisite Crypt::DSA failed to load: Can't locate Crypt/DSA.pm in @INC (@INC contains: /ssh-perl/Crypt-IDEA-1.08 /usr/perl5/5.6.1/lib/sun4-solaris-64int /usr/perl5/5.6.1/lib /usr/perl5/site_perl/5.6.1/sun4-solaris-64int /usr/perl5/site_perl/5.6.1 /usr/perl5/site_perl /usr/perl5/vendor_perl/5.6.1/sun4-solaris-64int /usr/perl5/vendor_perl/5.6.1 /usr/perl5/vendor_perl .) at (eval 8 ) line 3, <STDIN> line 4.
[color=red]Warning: prerequisite Crypt::IDEA failed to load: Can't locate loadable object for module Crypt::IDEA in @INC (@INC contains: /ssh-perl/Crypt-IDEA-1.08 /usr/perl5/5.6.1/lib/sun4-solaris-64int /usr/perl5/5.6.1/lib /usr/perl5/site_perl/5.6.1/sun4-solaris-64int /usr/perl5/site_perl/5.6.1 /usr/perl5/site_perl /usr/perl5/vendor_perl/5.6.1/sun4-solaris-64int /usr/perl5/vendor_perl/5.6.1 /usr/perl5/vendor_perl .) at (eval 9) line 3
Compilation failed in require at (eval 9) line 3, <STDIN> line 4.[/color]Warning: prerequisite Math::GMP failed to load: Can't locate Math/GMP.pm in @INC (@INC contains: /ssh-perl/Crypt-IDEA-1.08 /usr/perl5/5.6.1/lib/sun4-solaris-64int /usr/perl5/5.6.1/lib /usr/perl5/site_perl/5.6.1/sun4-solaris-64int /usr/perl5/site_perl/5.6.1 /usr/perl5/site_perl /usr/perl5/vendor_perl/5.6.1/sun4-solaris-64int /usr/perl5/vendor_perl/5.6.1 /usr/perl5/vendor_perl .) at (eval 21) line 3, <STDIN> line 4.
Warning: prerequisite Math::Pari failed to load: Can't locate loadable object for module Math::Pari in @INC (@INC contains: /ssh-perl/Crypt-IDEA-1.08 /usr/perl5/5.6.1/lib/sun4-solaris-64int /usr/perl5/5.6.1/lib /usr/perl5/site_perl/5.6.1/sun4-solaris-64int /usr/perl5/site_perl/5.6.1 /usr/perl5/site_perl /usr/perl5/vendor_perl/5.6.1/sun4-solaris-64int /usr/perl5/vendor_perl/5.6.1 /usr/perl5/vendor_perl .) at (eval 22) line 3
Compilation failed in require at (eval 22) line 3, <STDIN> line 4.
Warning: prerequisite String::CRC32 failed to load: Can't locate String/CRC32.pm in @INC (@INC contains: /ssh-perl/Crypt-IDEA-1.08 /usr/perl5/5.6.1/lib/sun4-solaris-64int /usr/perl5/5.6.1/lib /usr/perl5/site_perl/5.6.1/sun4-solaris-64int /usr/perl5/site_perl/5.6.1 /usr/perl5/site_perl /usr/perl5/vendor_perl/5.6.1/sun4-solaris-64int /usr/perl5/vendor_perl/5.6.1 /usr/perl5/vendor_perl .) at (eval 29) line 3, <STDIN> line 4.
Writing Makefile for Net::SSH::Perl


¿Alguien me puede decir qué hago mal?

Muchas gracias
jojulo
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2008-08-12 04:44 @238

Notapor explorer » 2008-08-13 11:25 @517

Siento que te sea tu comienzo en Perl tan dificultoso. Primero, estás usando un sistema operativo anticuado al que le quedan dos noticieros. Segundo, y más grave, no estás conectado a Internet.

Desde luego, has elegido la peor combinación para ponerte a aprender Perl.

Casi te sale mejor ir al kiosco, comprar una revista con una distribución Linux, y probarlo en una máquina Intel. Más barato, rápido, y cómodo.

Y tercero, has elegido instalar uno de los módulos con mayores y complicadas dependencias.

Por partes...

Si no tienes Internet, la solución pasa por conectarte a Internet y conseguir una copia actual de CPAN, con todos los módulos. Eso se consigue con el módulo CPANmini (o miniCPAN), que hace un mirror de todos los módulos disponibles, pero solo en su última versión. Actualmente ocupa un más de un CD. De esa manera tienes una docena de miles de módulos a tu disposición.

Luego, en el ordenador sin conexión, hay que configurar CPAN.pm para que use la copia local que hemos hecho, para cuando le pidamos instalar algún módulo.

Si todo va bien, basta con hacer el comando cpan para instalar módulos. Él se encargará de la descompactación, compilación, testeo, e instalación; y de los módulos dependientes.

Si no... pues hay que instalar los módulos uno a uno.

Lo ideal, es hacer que los módulos se instalen en alguno de los directorios indicados por @INC. Así, nos ahorramos el uso de 'use lib'. Eso es algo que los Makefile de los módulos se encargan de hacer.

Aún así, seguimos teniendo la posibilidad de instalar los módulos donde queramos. Nuestro propio directorio, por ejemplo, algo normal en los alojamientos web.

Si, a la hora de ejecutar un programa, sale un error como los que muestras, es que esos módulos no se han instalado en alguno de los directorios de @INC y/o Perl no los encuentra.

En el caso que muestras, dices que has modificado Makefile para que encuentre los módulos.

Yo creo que es una mala estrategia. Debería ser:
* Instalar los módulos en orden de dependencia. Ir de menos a más. De esa forma no
* Instalarlos en alguno de los directorios del sistema. Esto es algo automático si haces la instalación siendo root.

De esta forma, no tenemos que ir modificando ninguno los Makefiles.

Aún así, si queremos seguir con el proceso de los 4 pasos (perl Makefile.PL, make, make test y make install), también es posible indicar el directorio de instalación sin modificar los Makefiles (ejemplo más adelante).

En cuanto a lo que muestras, los errores dicen:
que no encuentra a los módulos Convert::PEM, Crypt::DH, Crypt::DSA, Crypt::IDEA, Math::GMP, Math::Pari, String::CRC32.

Algunos de estos módulos requieren la compilación de algunas librerías en C, pero el mensaje principal es que no ha podido encontrarlos en ningún directorio.

Debes primero intentar instalar estos módulos antes de instalar el Net::SSH::Perl.

Aquí tienes un ejemplo de uso del comando cpan para la instalación de módulos en un determinado directorio.

Código: Seleccionar todo
cpan> o conf mbuildpl_arg "--install_base /ssh/Crypt-IDEA-1.08"
cpan> o conf makepl_arg "PREFIX=/ssh/Crypt-IDEA-1.08"
cpan> install Math::Pari
(Sacado de PerlMonks).

Finalmente, aquí hay un ejemplo de cómo indicar el directorio de instalación, en el método clásico de los makes:

Código: Seleccionar todo
    % perl Makefile.PL PREFIX=/ssh/Crypt-IDEA-1.08
    % make
    % make install
(Sacado de este foro, con más ejemplos, algunos de ellos, en Solaris).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados

cron