2010-04-21 10 views
5

Siendo muy nuevo para Perl pero no para los lenguajes dinámicos, estoy un poco sorprendido de cómo no es sencillo el manejo de los módulos.¿Por qué no puedo simplemente copiar los módulos Perl instalados en otras máquinas?

Sure, cpan X funciona teóricamente, pero estoy trabajando en el mismo proyecto de tres máquinas diferentes y sistemas operativos (en el trabajo, en el hogar, las pruebas en un entorno externo).

  • En el trabajo (Windows 7) tengo problema con cpan debido a nuestro servidor de seguridad que hace ftp inutilizable
  • En casa (Mac OS X) que funciona
  • En el ambiente externo (Linux CentOS) se Funcionó después de horas porque no tengo acceso de root y tuve que configurar cpan para operar como un usuario no root
  • He intentado en otro servidor donde tengo acceso. Si el entorno externo anterior es un VPS y entonces tengo un acceso de shell, este otro es un alojamiento compartido barato donde no tengo manera de instalar nuevos módulos que no sean los preinstalados

En este momento todavía no puede instalar Template en Windows. He visto que como alternativa podría compilarlo y también he probado el PPM de ActiveState, pero el módulo no existe allí.

Ahora, mi perplejidad es que Perl sea un lenguaje dinámico. He tenido todo este tipo de problemas mientras trabajaba, por ejemplo, con C, donde tuve que compilar todas las bibliotecas para toda la plataforma, pero pensé que con Perl el enfoque habría sido muy similar al de Python o PHP, donde en 90 % de los casos, copiar el módulo en un directorio e importarlo simplemente funciona.

Entonces, mi pregunta: si los módulos de Perl están escritos en Perl, ¿por qué el método de copiar/pegar no funcionará? Si es necesario compilar algunos (o algunos) módulos, ¿cómo verlos en CPAN si un módulo es solo de Perl o depende de bibliotecas compiladas? ¿No hay una forma de descargar el módulo (tar, zip ...) y usar cpan para implementarlo? Esto resolvería mi problema en Windows.

+3

Cuando los módulos están escritos en Perl, * solo * puede copiarlos. Y sí, también puedes "cpan". aunque eso te deja a ti mismo para resolver dependencias. – hobbs

+0

Un VPS generalmente implica acceso a la raíz, no solo acceso a la shell. – MkV

+1

¿Qué estás usando en Windows? Strawberry Perl, ActiveState, ¿algo más? Creo que ppm tiene Template Toolkit. Si tiene problemas para instalar Template Toolkit, siempre puede probar Template :: Tiny, que solo depende de Capture :: Tiny, que a su vez solo depende de los módulos Perl core – MkV

Respuesta

4

En el ambiente externo (Linux CentOS) funcionó después de horas porque no tiene acceso de root y tuve que configurar CPAN para operar como un usuario no root

Ésta es una de esos momentos en los que ayuda saber The Trick. En este caso, local::lib, que le permite configurar un área de instalación no raíz y todas las variables ENV en aproximadamente tres minutos.

si los módulos de perl están escritos en perl, ¿por qué el método de copia/pasado no funciona?

Algunos están escritos en Pure Perl, pero muchos están escritos parcialmente en C (utilizando la XS API de Perl) para mayor eficiencia.

A veces terminas con situaciones como JSON::XS, JSON::PP y JSON::Any para autoseleccionar la mejor que está instalada.

¿No hay una forma de descargar el módulo (tar, zip ...) y usar cpan para implementarlo?

El programa de cpan se trata de obtener cosas de Internet. Puede descargar el paquete (habrá un enlace a lo largo de las líneas de "Descarga: CGI.pm-3.49.tar.gz" en el lado derecho de la página CPAN), descomprimirlo, y luego

perl Makefile.PL 
make 
make install 

Probablemente sea mejor que configure su instalación de cpan para usar solo fuentes HTTP (en la opción de configuración urllist). Posiblemente llegar a create a mini CPAN mirror dentro de su red.

+0

El comando cpan es mucho más que buscar distros. :) –

10

Ahora, Perl es un lenguaje dinámico, pero eso no implica que todo lo que las personas escriben es portátil en todas las plataformas. Eso no es culpa del lenguaje. Ni siquiera es culpa del programador. Algunas cosas, como Win32::OLE, no deberían funcionar en Unix. :)

Otros lenguajes dinámicos tendrán algunos de los mismos problemas. Si tiene que compilar el código C, no podrá simplemente copiar archivos a otra máquina. Algunas distribuciones configuran el código de forma ligeramente diferente dependiendo de su sistema operativo, etc.

Incluso si pudiera copiar archivos, debe asegurarse de copiar todos los archivos que necesita. ¿Sabes todo lo que necesitas para un módulo en particular? Recuerde, muchos de ellos tienen dependencias.

La mayoría de los problemas que tiene no tienen nada que ver con el idioma. Estás teniendo problemas con las herramientas. Si desea una herramienta CPAN de cero conf que toma todas las decisiones por usted, intente cpanminus. Es casi lo mismo que obtendría de cpan (aunque es un código diferente), pero toma todas las decisiones por usted. No ejecuta ninguna de las pruebas de distribución, y se instala en su directorio de usuario. Cuando necesite algo que le dé control, vuelva al cpan.

+1

"Win32 :: OLE no debería funcionar en Unix". - Huelo una caricatura de XKCD potencial en algún lugar allí> =) – DVK

Cuestiones relacionadas