programa para mac instalar gratis descargar compilador actualizar perl perlbrew locallib

para - ¿Perlbrew y local:: lib al mismo tiempo?



perl 64 bits (4)

Como said miyagawa, puede que no sea necesario usar local :: lib si utiliza Perls instalado exclusivamente por Perlbrew.

Pero si aún desea poder alternar entre su Perls elaborado y el sistema Perl, existe un script llamado Perlswitcher para esto. No es bonito pero funciona. Todo lo que necesita hacer es descargar el script, puede guardarlo como ~/perl5/userperls/bashrc como fuente.

Proporciona dos comandos. perlswitch permite cambiar a un Perl que fue instalado por Perlbrew o al sistema Perl. perlinfo le dice qué Perl se está utilizando actualmente. Luego puede usar cpanm , que instalará paquetes en su cpanm local cuando use el sistema Perl o directamente en el sitio Perl cuando use un Perl personalizado.

Después de cambiar a un Perl personalizado utilizando perlswitch , perlbrew list también sabrá qué Perl se está utilizando:

$ perlswitch perl-5.18.4 Setting new perl /var/www/perl5/perlbrew/perls/perl-5.18.4/bin/perl... Using user perl (site_perl) instead of local::lib $ perlbrew list perl-5.16.3 * perl-5.18.4 perl-5.20.2

Hasta ahora he estado usando el sistema perl (en Ubuntu 10.10) y estaba usando local :: lib para instalar módulos CPAN en mi directorio privado ~ / perl5

Como estoy tratando de usar perlbrew, parece que no se conocen entre sí. Instalé perl-5.12.3 usando perlbrew pero cuando cambio a usar perlbrew, uso perl-5.12.3 todavía veo el PERL5LIB y el PERL_MM_OPT establecidos por local :: lib.

Eso no es bueno:

$ cpan XML::Simple /home/gabor/perl5/perlbrew/perls/perl-5.12.3/bin/perl: symbol lookup error: /home/gabor/perl5/lib/perl5/x86_64-linux-gnu-thread-multi/auto/Cwd/Cwd.so: undefined symbol: Perl_Gthr_key_ptr

mientras

$ which cpan /home/gabor/perl5/perlbrew/perls/perl-5.12.3/bin/cpan

por lo tanto, está utilizando la versión correcta del cliente cpan pero las cuotas de la variable de entorno PERL5LIB recogen los módulos desde el lugar equivocado.

¿Perlbrew tiene algún modo de compatibilidad o debo desactivar PERL5LIB y PERL_MM_OPT manualmente?


Desde que empecé a usar perlbrew, dejé de usar local :: lib para el uso de shell, porque ahora que tengo mi propio perl, tengo permisos de escritura para todo, solo instalar en site_perl es mucho más sencillo, y eso me permite tener diferentes versiones. de modulos para cada perl.

Sigo usando local :: lib (o más específicamente, las opciones -pan o -L de cpanm que configuran automáticamente el directorio local :: lib) para mantener las dependencias específicas de la aplicación dentro de un directorio de aplicaciones.


Es posible, pero no cómodo. Si se trata de una configuración de un solo usuario, es mejor que no utilice local::lib y simplemente permita que Perlbrew administre los módulos por usted. Además, si se trata de una configuración multiusuario en una red homogénea, donde todos tienen la misma máquina y sistema operativo, entonces puede configurar PERLBREW_ROOT para, por ejemplo, /net/share/perlbrew y luego se pueden compartir sus perls instalados (y sus módulos). Como se señaló en las otras respuestas, esto será un problema si intenta mezclar máquinas (y posiblemente también sea problemático si tiene diferentes sistemas operativos).

En una red muy diversa, preferimos mantener todo separado. Simplemente puede configurar su local::lib para que sea una función de su perl actual y su plataforma actual, por ejemplo,

distro=lsb_release -d|cut -f2|tr '' '' ''-'' arch=`uname -m` platform="$distro-$arch" export PERLBREW_ROOT=/net/share/perlbrew/$platform # You will have to first do ''perlbrew init'' (just once for all users) # In this case you don''t need (and shouldn''t have) a ~/.perlbrew source $PERLBREW_ROOT/etc/bashrc perl5base=/net/share/perl # When $PERLBREW_PERL is not defined, local::lib puts modules in $perl5base/$platform perl5=$perl5base/$platform/$PERLBREW_PERL # We also found that we needed to clean PERL5LIB in between export PERL5LIB=`echo -n $PERL5LIB|sed "s|${perl5base}[^:]*||g"` export PATH=`echo -n $PATH|sed "s|${perl5base}[^:]*||g"` # Setup local lib, relative to the perl being used lib=$perl5/lib/perl5 mkdir -p $lib eval $(perl -I"$lib" -Mlocal::lib="$perl5")

Este no es nuestro script exacto, en particular, debería verificar que todos estos directorios existen primero. Debe ejecutar perlbrew init una vez por plataforma y también debe iniciar local :: lib cada vez.

No recomiendo este enfoque, pero proporciono como ejemplo de una manera de hacer que esto funcione, lo que hace para nuestra red mixta (incluso en Mac OS). Salir de local :: lib out y usar solo perlbrew (ignorar el perl del sistema) sería un enfoque más limpio.


local :: lib no fue diseñado para funcionar con varias versiones de Perl instaladas al mismo tiempo. Los módulos Pure-Perl no suelen ser un problema, pero los módulos XS no son compatibles en las principales versiones.

Puede continuar usando local :: lib para los módulos de Pure-Perl (de modo que no tiene que instalarlos para cada versión de Perl que haya creado, pero los módulos XS deben instalarse en los directorios perlbrew . t necesita borrar PERL5LIB (y no debería, ya que los módulos XS pueden tener dependencias puras de Perl que están instaladas allí), pero tendrá que borrar PERL_MB_OPT y PERL_MM_OPT cuando instale módulos XS para evitar que se instalen en el local: directorio lib

Si necesita continuar usando local :: lib para los módulos XS para el sistema Perl, sugiero crear un segundo entorno local :: lib para eso (quizás en ~/perl5sys ). Podría ser más fácil usar perlbrew para instalar una copia de la misma versión de Perl que el sistema Perl, y luego usarla en lugar del sistema Perl.

Puede limpiar los módulos XS en su local :: lib eliminando el directorio /home/gabor/perl5/lib/perl5/x86_64-linux-gnu-thread-multi .