2009-02-12 33 views
56

Estoy usando una máquina Linux alojada, por lo que no tengo permisos para escribir en el directorio /usr/lib.¿Cómo puedo instalar un módulo CPAN en un directorio local?

Cuando trato de instalar un módulo CPAN haciendo lo habitual:

perl Makefile.PL 
make test 
make install 

Dicho módulo se extrae a una carpeta blib/lib/. He guardado use blib/lib/ModuleName pero todavía el compilador dice que el módulo no puede ser encontrado. Intenté copiar el archivo .pm en el directorio local y guardé require ModuleName, pero aún así me da un error.

¿Cómo puedo instalar un módulo en otro directorio y usarlo?

+1

En general, se debe dar el mensaje de error. "Algún error" no ayuda mucho. – jrockway

+5

posible duplicado de [¿Cómo puedo usar un nuevo módulo Perl sin permisos de instalación?] (Http://stackoverflow.com/questions/251705/how-can-i-use-a-new-perl-module-without-install -permissions) – daxim

+0

IMPORTANTE .. algunos módulos usan Build.PL en lugar de Makefile.PL (o lo envuelven con uno u otro), en algunos casos, (como cuando se ejecutan las pruebas), instalando desde/hacia una ruta con espacios en confundirá el MANIFIESTO y hará que la (s) prueba (s) falle (n), generalmente esto solo ocurre cuando se establece RELEASE_TESTING, así que asegúrese de que no esté en su máquina. Si hay errores MANIFEST como este, entonces probablemente haya otros al acecho, se adhieren a las rutas que no tienen espacio en blanco (espacio, pestaña, un espacio, etc.) – osirisgothra

Respuesta

32

tuve un problema similar, donde no podía incluso instalar locales :: lib

he creado un instalador que instala el módulo en alguna parte relativa a los archivos .pl

La instalación va como:

perl Makefile.PL PREFIX=./modulos 
make 
make install 

a continuación, en el archivo .pl que requiere el módulo, que está en ./

use lib qw(./modulos/share/perl/5.8.8/); # You may need to change this path 
use module::name; 

El resto de los archivos (makefile.pl, module.pm, etc.) no requieren cambios.

Puede llamar al archivo .pl con sólo

perl file.pl 
+13

No hay motivo para modificar su secuencia de comandos: configure PERL5LIB en lugar de usando 'use lib'. local :: lib se ocupa de esto por ti, sigue sus instrucciones y estarás bien. – jrockway

+9

usa INSTALL_BASE en lugar de PREFIX. –

+0

perl Makefile.PL INSTALL_BASE =/home/irraju/PadWalker me dio este error "'INSTALL_BASE' no es un nombre conocido del parámetro MakeMaker." Incluso la opción PREFIX me dio el mismo – Ram

19

local::lib te ayudarán. Convencerá a "make install" (y "Build install") para instalarlo en un directorio en el que pueda escribir, y le indicará cómo llegar a esos módulos al perl.

En general, si desea utilizar un módulo que está en un directorio blib /, quiere decir perl -Mblib ... donde ... es como normalmente invocaría su script.

+0

** Realmente ** recomiendo que use local :: lib. Cuida todos los pequeños detalles. – melo

+0

Desafortunadamente no pasa la 'prueba de prueba' cuando intento instalarlo. – reinierpost

59

Otras respuestas que ya están en Stackoverflow:

De perlfaq8:


How do I keep my own module/library directory?

Cuando se construye módulos, dicen Perl dónde instalar los módulos.

Para distribuciones basadas en Makefile.PL, utilice la opción INSTALL_BASE al generar Makefiles:

perl Makefile.PL INSTALL_BASE=/mydir/perl 

Puede configurar esto en su configuración de manera CPAN.pm módulos se instalan automáticamente en el directorio de la biblioteca privada cuando se utiliza el CPAN.pm shell:

% cpan 
cpan> o conf makepl_arg INSTALL_BASE=/mydir/perl 
cpan> o conf commit 

Para distribuciones basadas en Build.PL, utilice la opción --install_base:

perl Build.PL --install_base /mydir/perl 

Puede configurar CPAN.pm utilizar automáticamente esta opción también:

% cpan 
cpan> o conf mbuildpl_arg '--install_base /mydir/perl' 
cpan> o conf commit 
+1

Creo que deberías agregar comillas: 'o conf mbuild_arg '--install_base/mydir/perl'' – Amro

+4

Creo que las personas que encuentren problemas deberían editar la publicación. :) –

+0

Brian, una pregunta: el enlace que proporcionó dice que el parámetro '--install_base' se pasa a' perl Build.PL'; pero 'mbuild_arg' se trata de argumentos para'./Build'. Tal vez te refieres a 'mbuildpl_arg'? O hay un error en Perlfaq? – skaurus

3

Recomiendo encarecidamente Perlbrew. Le permite ejecutar múltiples versiones de Perl, instalar paquetes, piratear Perl internals si lo desea, todos los permisos de usuario normales.

+0

¿El enlace está muerto? – ceving

2

Para distribuciones basadas en Makefile.PL, utilice la opción INSTALL_BASE al generar Makefiles:

perl Makefile.PL INSTALL_BASE=/mydir/perl 
Cuestiones relacionadas