El ensamblaje reproducible está cada vez más cerca / Sudo Null IT News

Problema

Uno de los problemas de GNU Emacs es que es difícil crear una compilación reproducible. Por supuesto, siempre puedes crear un contenedor y ejecutar Emacs usando Docker, Podman o incluso Kubernetes… Pero no estoy hablando de casos tan complejos ahora.

Entonces, la esencia del problema: si creas un archivo init.el y depurarlo, luego de 2 a 3 meses, ejecutar Emacs con él en otra computadora probablemente provocará errores de instalación o incompatibilidad de paquetes.

Autores de varios lenguajes y tecnologías de programación han resuelto el problema de la incompatibilidad de paquetes de diferentes maneras. Como solía escribir en Python, es lo más cercano a mí. REQUIREMENTS– archivos.

Lo más probable es que junio se llene REQUIREMENTS Entonces:

django
django-rest-framework
pillow
psycopg2

Middle se llama así porque ha visto algunas tonterías, por lo que las versiones del paquete se definirán:

django==5.1.1
django-rest-framework==3.15.2
pillow==10.4.0
psycopg2<3

El senior construirá un contenedor con las dependencias especificadas y lo usará y solo eso.

Soluciones

¿Qué pasa con Emacs? Durante mucho tiempo no fue posible utilizar versiones fijas de paquetes de archivos como MELPA. El hecho es que los archivos no almacenan el historial de versiones, sino que brindan acceso únicamente a la última versión del paquete. ¿Necesito decir que los paquetes MELPA a menudo se rompen?

MELPA Stable no resuelve el problema, porque recopila paquetes no de la versión estable, sino de cualquier paquete en general, siempre que contenga una etiqueta del sistema de control de versiones.

Cita del archivo LÉAME

Los paquetes en MELPA se crean directamente a partir del último código fuente del paquete en los repositorios anteriores, pero también cree y publique paquetes correspondientes al último código etiquetado en esos repositorios, donde existen etiquetas de versión. Estos paquetes se publican en un archivo de paquetes separado llamado MELPA Estable. La mayoría de los usuarios deberían preferir MELPA a MELPA Stable.

Intentaron resolver el problema de arreglar las dependencias en Emacs de diferentes maneras. Por esta (pero no sólo esta) razón, proyectos como:

  • Recto.el

  • el-get

  • Quelpa

  • Barril

  • Demanda

Cada uno de ellos tiene sus propias características y muchos tienen mala documentación. En este sentido, el proyecto Eask parecía especialmente encantador, que recomienda oficialmente no leer un sitio con su propia documentación.

También existen soluciones que ofrecen agregar código de paquete como submódulos de Git. Pero ese no es nuestro camino, ¿verdad?

paquete-vc-instalación

Los autores de Emacs descubrieron cómo resolver el problema de corregir las versiones de los paquetes y al mismo tiempo preservar la funcionalidad. package.el. ¡Encontrarse! package-vc-install.el!

A partir de la versión 29.1, el paquete estuvo disponible en Emacs. package-vc-installque es casi lo mismo que package.elsolo le permite instalar versiones específicas de paquetes de fuentes específicas.

Función package-vc-install toma como entrada el nombre del paquete y un diccionario con la configuración de origen. Las claves de este diccionario pueden tener los siguientes valores:

  • :url — enlace al repositorio. Puede utilizar una ruta de directorio local.

  • :branch— nombre de rama, nombre de etiqueta o hash de confirmación.

  • :lisp-dir— ruta al directorio con archivos .el. Este campo debe completarse si los archivos del paquete no están almacenados en el directorio raíz.

  • :doc — ruta al directorio con la documentación. Este campo deberá cumplimentarse si desea recoger documentación junto con el paquete. Pero en general esto no es necesario.

Hay otras claves, consulte para obtener más detalles. Documentación de GNU Emacs.

¿Contras?

Tienes que pagar por todo y package-vc-install sin excepción. Tendrás que:

  • buscar de forma independiente repositorios de los paquetes necesarios;

  • instalar el cliente del sistema de control de versiones correspondiente en el sistema;

  • realizar un seguimiento independiente de las actualizaciones de paquetes.

Hay buenas noticias: si actualizas use-package hasta la versión 2.4.6entonces la funcionalidad necesaria ya está integrada:

(use-package delight
  :ensure t
  :vc (:url "
       :rev "1.7"))

(use-package ace-window
  :ensure t
  :vc (
       :url "
       :rev "0.10.0")
  :bind (:map global-map
              ("M-o" . ace-window)))

Ver detalles en documentación del paquete en el sitio web de GNU ELPA.

Publicaciones Similares

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *