2009-02-20 17 views
11

Necesito ejecutar las aplicaciones de Perl que desarrollo en cygwin Windows en hosts de HP unix/Solaris. No soy un superusuario en las máquinas Unix y no puedo tocar la ubicación predeterminada del módulo Perl ni puedo instalar módulos en la ubicación predeterminada del módulo Perl. Además, la instalación de Unix carece de la mayoría de los módulos básicos y no puedo cambiar eso.¿Cómo puedo crear un Perl portátil cuando no puedo instalar módulos en el host de destino?

Por ejemplo, tengo una aplicación Perl que necesita Expect que tiene partes compiladas en C nativas. ¿Cómo implementaría esta aplicación en Unix con sus dependencias requeridas sin tener que instalar nada más en esa caja?

¿Hay alguna manera de construir toda la aplicación Perl en Cygwin Windows y luego simplemente desplegar un ejecutable en Unix y ejecutarlo desde mi directorio de inicio allí?


EDITAR Además basa en respuestas hasta el momento:

Thanks in particular to brian, la solución LIB dir local parece funcionar en caso de Perl nativo, pero en el caso de los módulos componentes de Perl que necesitan C, compilación cruzada plataforma, es decir, compilar en cygwin para ejecutar en Solaris, no es realmente posible ya que temía.

Sin embargo, ¿tendría otra instalación de Linux ayuda, es decir, esto sería posible más fácil entre diferentes sabores de Unix como paquete Perl en Linux y luego implementar en Solaris/HP? ¿Y qué tal algo como lcc?

También me gustaría saber un poco más si alguien ha desarrollado un paquete nativo de Perl en Windows que incluye todas las dependencias de una aplicación Perl complicada que luego se puede mover a Unix como un solo archivo. (Ahora entiendo que no funcionará en caso de que el código C nativo se incluya como en Expect.pm, pero ¿qué ocurre si la aplicación solo utiliza módulos perl puros?)

Básicamente por muchas razones lo estoy intentando para minimizar el tiempo que necesito para estar conectado a estos hosts Unix de "producción" y hacer todo lo posible localmente de antemano.


añadido un nuevo cross-compilar question, ya que me sentí que estaba virando tal vez demasiado lejos de la pregunta original de Perl.


EDITAR - Par parece prometedor para el puro Perl, aunque misma cosa, no se ve a resolver el problema de la plataforma compilador cruzado para extensiones nativas

Respuesta

11

En este caso, consideraría entregar una aplicación completa con su propio Perl. Puedes elegir cualquier versión que te guste y cualquier módulo que te guste. Compile todo, organice todo en un directorio y luego evalúe el resultado. Para implementar, copie el archivo y descomprímalo. Utilice los consejos que otros ya han notado sobre las rutas de búsqueda de bibliotecas, etc. En esencia, su aplicación obtiene su propia pila.

Ahora, el truco está en la compilación cruzada. ¿Por qué te estás desarrollando en Cygwin? ¿Es ese un objetivo también? ¿Hay alguna razón por la que no tenga una máquina de desarrollo HP/UX o Solaris? A qué arquitectura se dirige (RISC, SPARC, Intel, etc.). Si no puede obtener hardware para ejecutarlos, obtenga algunas máquinas virtuales para sus objetivos y desarrolle allí.

Aparte de eso, puede instalar módulos en cualquier lugar que tenga permisos. Veo perlfaq8:

+0

"¿Por qué estás desarrollando en Cygwin? ¿Es ese un objetivo también?", La respuesta es sí, me gustaría que estas aplicaciones se ejecuten también en Windows, y parece más fácil apegarse a cygwin en Windows ya que es la más unix. –

+0

"A qué arquitectura se dirige (RISC, SPARC, Intel, etc.)". Por alguna razón, en esta organización las máquinas de desarrollo de Unix son difíciles de conseguir. La arquitectura de HP UX es RISC2.0. Debo verificar que Solaris. ¿Hay una máquina virtual gratuita que se ejecute en Windows XP para HP ux/Solaris? Recomendaciones? –

+0

¿Por qué necesita una VM gratuita? Gaste $ 100 y ahórrese un montón de tiempo. –

2

Establezca su variable de entorno PERLLIB a su personnal Perl lib directorio o use la línea de comando -I cambie a Perl para indicarlo.

Si tiene acceso a la máquina HP-UX, puede compilar Espere allí e instálela en su directorio. Pero la compilación cruzada de Windows a HP-UX probablemente sea mucho más difícil. Tendría que crear un compilador cruzado de GCC.

+0

Bien, acabo de encontrar esto http://faq.perl.org/perlfaq8.html#How_do_I_keep_my_own, pero no resuelve el problema de compilación nativa –

3

Compilar un script Perl con todas sus dependencias en Windows con Cygwin y ejecutarlo Solaris simplemente no va a funcionar.

Ahora la pregunta es: ¿tiene acceso a un compilador en esa computadora Solaris?No es porque usted no tiene acceso a la raíz que no se puede compilar e instalar módulos Perl en su directorio personal mediante el uso de:

perl Makefile.PL PREFIX=$HOME 

Si tiene CPAN disponibles en el sistema Solaris se puede establecer el prefijo en el CPAN pagar este manera:

  1. inicia el shell perl -MCPAN -e shell;
  2. cambiar el prefijo con conf makepl_arg PREFIX=/path/to/your/home/directory

Para su secuencia de comandos para ejecutar, puede empezar a Perl con el interruptor -I $HOME de línea de comandos, por ejemplo:

perl -I $HOME script.pl 

Su otra opción sería colocar este al comienzo de su secuencia de comandos

use lib $ENV{'HOME'}; 
+0

Me di cuenta, para cosas complicadas, que otro unix es HP, entonces tengo los dos. Nativo es el problema. Tiene algún compilador, cc es el HP-UX C compiler.c89, pero no está seguro de qué tan bien funcionará. Además, no hay ningún comando cpan, y perl está viejo. Esto es perl, v5.6.1 para PA-RISC2.0.¿Puede compilar cpan c89? –

+0

CPAN es un módulo perl, debe ejecutarlo como uno solo. Así 'perl -MCPAN -e shell'. Eso debería llevarte a un prompt 'cpan>'. –

+0

Si puede compilar módulos, también debe poder compilar perl. Usar los mismos argumentos para el comando de configuración en cada plataforma le dará aún más compatibilidad. – innaM

2

Si tiene un compilador en cada uno de sus sistemas (y algunas otras herramientas necesarias para nfigure como grep), no solo deberías poder compilar módulos, sino que también deberías poder construir tus propios ejecutables perl.

3

No he probado esta característica en particular, pero perl2exe dice que admite compilaciones multiplataforma.

+0

+1 Lo he usado en el pasado y ahorra muchos dolores de cabeza – bsruth

+1

Interesante, esperaba una alternativa gratuita, pero voy a echar un vistazo. Supongo que perl2exe hace algo que PAR no hace? –

+0

No estoy seguro de cómo perl2exe hace la compilación cruzada. Mi suposición es que IndigoStar proporciona las bibliotecas compartidas adecuadas de plataforma, y ​​las agrupa en el paquete, junto con el ejecutable del cargador. No 100% seguro. Póngase en contacto con el soporte de Indigo y pregúnteles al respecto. – daotoad

2

Querrá local::lib. Una vez que haya hecho eso, los módulos de Perl puros deberían funcionar de forma cruzada, pero deberá identificar y reinstalar los módulos compilados en la plataforma externa. Haga la instalación inicial en un Unix real, cpan en cygwin es lento.

+0

No he notado que cpan en Cygwin sea lento. ¿Puedes explicar a qué te refieres con eso? –

+0

En realidad, es en respuesta a un informe de usuario sobre cierta documentación que escribí. Parece que en una caja de desarrollo ligeramente poco especificada, usando cygwin, las cosas funcionan bastante más despacio que en mi iBook G4 mal especificado (512 mb RAM), por lo que mi evidencia es anecdótica en esta etapa. – singingfish

+0

Si es anecdótico, ¿puedes eliminar el comentario en tu respuesta? Me complace responder a los problemas con mi software y espero que la gente diga cosas veraces y compatibles al respecto. –

2

me he encontrado a través de esto varias veces en mis sistemas de trabajo. Tenemos una instalación base de Perl 5.8 y no tengo la capacidad de agregar módulos.Aquí está la solución que utilizo:

  1. Crear una carpeta llamada 'lib' en su raíz del proyecto (por ejemplo: ~/proyectos/miproyecto/lib)
  2. Cualquier módulos que se descargan de CPAN deben tener una Makefile así como un directorio llamado "lib". Copie los contenidos de la carpeta lib en su carpeta lib recién creada. Algunos módulos solo pueden contener un único archivo .pm y ninguna estructura de lib. Solo copie el archivo .pm.

el código debe hacer lo siguiente: en primer lugar, utilice cualquiera de los módulos que se han instalado normalmente, entonces unshift la variable de entorno @INC utilizar sus bibliotecas locales:

# Declare Includes -------------------------------------------------------------------------------- 
use Getopt::Long; 
use vars qw($VERSION); 
use DirHandle; 
use FileHandle; 


# Force perl to use our local 'lib' directory for imported modules, this allows us to 
# use modules without having to install them in th emain perl assembly. However, this 
#also prevents these modules from being used in other projects. 
BEGIN { unshift @INC, "lib"; } 
use Error qw(:try); 
use SOAP::Transport::HTTP; 
#use LWP::Protocol::https; 
use XML::Simple; 
use XML::Writer; 
use XML::Writer::String; 

La advertencia de este método es que algunos módulos Perl no usan el método 'lib' o tienen dependencias adicionales. Si tiene problemas, examine Makefile.PL para ver el módulo y vea qué está haciendo.

+0

No solo copie el directorio lib. Construya el módulo y luego use los contenidos de blib. –

Cuestiones relacionadas