2008-09-22 18 views
9

En el trabajo estoy usando Perl 5.8.0 en Windows.¿Cómo puedo actualizar Perl en Windows sin perder módulos?

Cuando puse por primera vez Perl, fui a CPAN, descargué todas las fuentes, hice algunos cambios (en el archivo .MAK? Para admitir subprocesos, o cosas por el estilo), e hice nmake/nmake test/nmake instalar. Luego, poco a poco, descargué módulos individuales de CPAN y realicé el baile nmake.

Por lo tanto, me gustaría actualizar a una versión más reciente, pero la nueva no debe romper ninguna secuencia de comandos existente. En particular, un montón de módulos de "uso" que he instalado deben instalarse en la nueva versión.

¿Cuál es la forma más confiable (y más fácil) de actualizar mi versión actual, asegurándome de que todo lo que he hecho con el baile nmake seguirá allí después de la actualización?

+0

Puede ser una buena idea si alguien cambia el título de este a 'Cómo actualizar perl en las ventanas', o algo similar. –

+0

Sugiero "Cómo actualizar Perl en Windows sin perder módulos". Empecé a dar mi respuesta, y luego me di cuenta de que no encajaba porque mi respuesta es solo UNIX, y requiere que reinstales todos tus módulos (lo que creo que va a ser un requisito de todos modos). – skiphoppy

+0

Gracias por las sugerencias de título. He editado para reflejar tus sugerencias. – piCookie

Respuesta

9

Como notaron otros, comience por instalar el nuevo perl en un lugar separado. Tengo varios perls instalados, cada uno completamente separado de todos los demás.

Para hacer eso, tendrá que configurar y compilar las fuentes usted mismo. Cuando ejecuta configure, tendrá la oportunidad de especificar el instalador. Di instrucciones detalladas para esto en "Compilación de mi propio Perl" en the Spring 2008 issue of The Perl Review. También hay un artículo en Programación Perl efectiva que le muestra cómo hacerlo.

Ahora, regrese a su distribución original y ejecute cpan -a para crear un archivo de autobundle. Este es un documento de Pod que enumera todas las cosas adicionales que ha instalado, y CPAN.pm entiende cómo usarlo para reinstalar todo.

Para instalar cosas en el nuevo perl, use esa ruta de perl para iniciar CPAN.pm e instalar el archivo de autobúsculo que ha creado. CPAN.pm obtendrá las rutas de instalación correctas desde la configuración de ese perl.

Mire la salida para asegurarse de que las cosas vayan bien. Este proceso no instalará las mismas versiones de los módulos, sino las últimas versiones.

Como para Strawberry Perl, hay una versión "portátil" que puede instalar en algún lugar además de la ubicación predeterminada. De esta forma, podría tener el nuevo perl en medios extraíbles. Puede probarlo en cualquier lugar sin perturbar la instalación local. Aunque no creo que esté listo para un uso general. La herramienta Berrybrew puede ayudarlo a administrar eso.

Buena suerte, :)

1

Cuando lo hice instalé el más nuevo en un directorio separado. Hay un poco de confusión añadida con dos versiones, pero definitivamente ayuda a asegurarse de que todo esté funcionando primero, y proporciona una manera rápida de volver al antiguo en caso de apuro. También configuré Apache para que ejecutara dos servicios por separado, de modo que podía jugar con el nuevo Perl en un solo servicio sin tocar el de producción del viejo Perl.

Probablemente sea mucho más prudente, en retrospectiva, instalar en una computadora por separado, y hacer sus pruebas allí. Registre cada cambio de configuración que necesite realizar.

No estoy seguro de construirlo usted mismo — Siempre acabo de utilizar los binarios preempaquetados para Windows.

No estoy seguro de entender exactamente lo que estás preguntando. ¿Tiene una lista de cambios que realizó en el archivo MAKE 5.8? ¿O la pregunta es cómo obtener esa lista? ¿También está preguntando cómo averiguar qué paquetes sobre la instalación base ha obtenido de CPAN? ¿También está preguntando cómo probar que sus cambios personalizados no romperán esos paquetes si los vuelve a obtener de CPAN?

+0

Dado el gran número de modificaciones, los preempaquetados probablemente no funcionarán. También me he instalado en la versión llamada carpetas y vinculado desde una carpeta genérica R: \ PERL para ayudar a cambiar. – piCookie

+0

Los cambios en el archivo MAKE 5.8 no son importantes. Estoy más preguntando cómo encontrar qué paquetes sobre la base de instalación que he obtenido. Tengo muchos guiones que dicen "use xxx" donde xxx se descargó e incorporó. Todos deben seguir trabajando. – piCookie

+0

Esto puede ser un poco cojo, pero podría usar "Encontrar en archivos" de TextPad o equivalente para buscar todos los scripts para "^ use". – Kev

8

Consideraría seriamente usar Strawberry Perl.

+0

Strawberry perl no parece darme ninguna opción sobre dónde se está instalando. Eso es un factor decisivo en mi caso. – piCookie

4

Puede instalar una segunda versión de Perl en una ubicación diferente. Tendrá que volver a instalar cualquier módulo no principal en la nueva versión. En general, las diferentes versiones de Perl no son compatibles con binarios, lo que podría ser un problema si tiene alguna biblioteca específica del programa que utilice componentes XS. Los módulos Pure Perl no deberían verse afectados.

3

Si permanece dentro de la pista 5.8, todos los módulos instalados que contengan extensiones XS (binarias) continuarán funcionando, ya que la compatibilidad binaria está garantizada dentro de la misma serie 5.8. Si se movió a 5.10, entonces debería recompilar cualquier módulo que contenga componentes XS.

Todo lo que necesita hacer es asegurarse de que la nueva compilación enumera los directorios de inclusión anteriores en su matriz @INC (que se usa para buscar módulos).

Por los sonidos de la misma, creo que estás en Windows, en cuyo caso los caminos @INC actuales se pueden ver con

perl -le "print for @INC" 

Asegúrese de orientar su nueva versión de Perl en otro directorio. Coexistirá felizmente con la versión anterior, y esto le permitirá elegir qué instalación de Perl se utilizará; solo se trata de ordenar su RUTA. Tan pronto como se inicia un intérprete de Perl, sabe dónde buscar el resto de sus módulos.

Strawberry Perl es probablemente la mejor distribución en Windows en estos días para hacer la tuya.

+0

¿Me permite Strawberry agregar módulos que he incluido en la cadena 5.8? Estoy muy feliz de pasar a la última versión, por lo que mantener 5.8 no es interesante. – piCookie

1

Creo que la respuesta a esta virtualisation implica de algún tipo:

  1. Establecer una copia exacta de su máquina en vivo actual. Actualice Perl, utilizando las mismas ubicaciones y estructuras de directorios que está utilizando en este momento.
  2. Revise sus scripts probándolos en la nueva imagen.
  3. Una vez que esté satisfecho, active el interruptor.

La idea detrás de esto es que probablemente haya todo tipo de sutiles dependencias y suposiciones en las que no haya pensado. Si bien es poco probable, la última versión de un módulo en particular (posiblemente incluso un módulo central, aunque es aún más improbable) podría tener una diferencia sutil en comparación con la que estaba usando. A menos que hayas revisado exhaustivamente toda la base de código, es muy posible que haya un módulo en particular que solo se necesita bajo ciertas circunstancias.

Puede tratar de ver esto mediante la creación de una lista de todas las secuencias de comandos - una lista que usted debe tener todos modos, a fuerza de todo el código estar bajo el control de versiones (que son usando el control de versiones, por ejemplo Subversion, sí ?) - e iterar a través de él, ejecutando perl -c en cada secuencia de comandos. p.ej. this script. Ese tipo de prueba automatizada es invaluable: puede configurarlo para funcionar, irse a tomar un café o lo que sea, y volver para comprobar si todo funcionó. Las primeras veces probablemente encontrará un módulo oscuro que había olvidado, lo cual está bien: el objetivo de automatizar esto es para que no tenga que hacer el trabajo pesado de verificar cada script .

+0

Gran consejo sobre el perl -c. Eso hará que sea mucho más fácil obtener un control de cordura básico. – piCookie

0

¿Por qué no usa ActivePerl y su herramienta "ppm" para (re) instalar módulos?

alt text

+0

La razón es que ya tenía una instalación perl con módulos adicionales instalados a través de compilación e instalación, y quería algo que actualizara esa instalación perl sin perder nada que ya había agregado. Si no hay una forma automatizada, es posible que deba cambiar a una versión de Perl completamente nueva, como sugiere. – piCookie

+0

puede obtener una lista de los módulos instalados usando "ppm list site". "Lista de áreas ppm" para obtener una lista de áreas. "ppm sitio de sincronización de área" para actualizar la base de datos de ppm con los paquetes que se han instalado y que no utilizan ppm. – lexicalscope

Cuestiones relacionadas