2010-10-22 14 views
5

Recientemente instalé un nuevo sistema y quise instalar Padre para verificarlo. Las instrucciones de instalación de Padre específicamente dicen que instale local :: lib, así que lo hice (aunque nunca antes lo había necesitado). Luego seguí mi camino instalando varios otros módulos, ejecutando CPAN desde mi cuenta de usuario normal con sudo para manejar las porciones requeridas de la raíz de la instalación.¿Cómo instalo un módulo de CPAN en todo el sitio mientras está presente local :: lib?

Luego llegó el momento de probar una de las aplicaciones web para las que se necesitaban estos módulos y, he aquí, apache no pudo encontrarlas. Cargaron bien desde la línea de comandos y una mirada rápida en ~/perl5 confirmó mi sospecha de que locales :: lib había secuestrado mis sesiones de CPAN y se instalan estos módulos allí en vez de en un lugar de todo el sitio, a pesar de mi config CPAN incluyendo

makepl_arg   [INSTALLDIRS=site] 
mbuildpl_arg  [--installdirs site] 

¿Qué debo hacer con mi configuración de CPAN para que los módulos se instalen en todo el sitio aunque esté instalado local :: lib? ¿O va a funcionar Padre sin él y puedo eliminar local :: lib por completo?

(I hacer no quieren cualquier módulos instalados bajo ~/perl5 menos que el padre insiste en ellos estar allí. Mi código en fase de desarrollo tiene sus propias ubicaciones de directorios específicos del proyecto y todo lo demás debe ser en todo el sitio. No tengo ningún necesidad de una ubicación de catch-all privada.)

+1

¿Qué muestra 'which perl' show?Si es distinto de '/ usr/bin/perl', es posible que desee invocar'/usr/bin/perl -MCPAN -e shell'. –

+0

Buena idea, pero muestra '/ usr/bin/perl'. –

Respuesta

8

Lo tengo. De acuerdo con las instrucciones en local::lib's CPAN page, configuré export PERL_MM_OPT='INSTALL_BASE=~me/perl', que anulaba la configuración en mi configuración de CPAN. Un rápido export PERL_MM_OPT= me devolvió a una ubicación de instalación adecuada.

Por un lado, eso es lo que obtengo por seguir las instrucciones a ciegas. Por otro lado, esperaba o conf para mostrar la configuración de configuración real que se está utilizando en lugar de las que están en la configuración de CPAN guardada (incluso si una variable de entorno las está anulando).

+1

Es por eso que creo que local :: lib, perlbrew, etc, aunque técnicamente bueno, son socialmente malos. Se supone que debe facilitar las cosas para las personas que ya entienden el proceso, no para que pueda ignorar lo que hace por usted. –

+1

* silencio prolongado * Estoy de acuerdo, terminé por quitarme el pelo por un problema del servidor con módulos que no se actualizaban correctamente para un usuario, descubrí que era porque la cuenta tenía local lib y los módulos solo se actualizaban en todo el sistema. Ahora estoy condenado a alrededor de 4 años (la longitud que tardé en responder a esta publicación) de volver a poner mis pelos en sus folículos apropiados. – osirisgothra

0

Basado en this comment, parece que local::lib instala su propia versión de CPAN.pm. Si este es el caso, puede que necesite encontrar el CPAN.pm original y asegurarse de que ese se cargue cuando ejecute su shell CPAN. Algo como:

perl -I /usr/lib/perl5 -MCPAN -e shell 

podría hacerlo. También puede encontrar perl -V útil para ver qué ruta incluye el compilador de Perl para sus módulos.

+0

No, los módulos se siguen instalando bajo '~/perl5' incluso con' -I/usr/lib/perl5' y todos los directorios en '~/perl5' eliminados de @INC. –

+0

Bien, esto le indicará qué módulo de CPAN.pm se está cargando: 'perl -MCPAN -le 'imprime $ INC {" CPAN.pm "}'' ¿Qué imprime? – Tim

+0

'/ usr/share/perl/5.10/CPAN.pm' –

1

Una exportación rápida PERL_MM_OPT = me devolvió a una ubicación de instalación adecuada.

Esto no me ayudó cuando intenté instalar Starman a nivel mundial. Tuve que editar /root/.bashrc a comentar (o eliminar) las líneas siguientes:

  1. PERL_LOCAL_LIB_ROOT exportación = "$ PERL_LOCAL_LIB_ROOT:/root/perl5";
  2. exportación PERL_MB_OPT = "- install_base/root/perl5";
  3. exportación PERL_MM_OPT = "INSTALL_BASE =/root/perl5";
  4. export PERL5LIB = "/ root/perl5/lib/perl5: $ PERL5LIB";
  5. exportación PATH = "/ root/perl5/bin: $ PATH";
Cuestiones relacionadas