Cómo cargar solo un subconjunto de paquetes instalados

13

Me encontré con un error que involucraba una interacción entre varios paquetes. Para informar el error, necesito proporcionar una receta reproducible que ilustre el problema. Esto requiere cargar los paquetes apropiados, pero nada más desde mi init, y ningún otro paquete. ¿Cuál es la mejor manera de hacer esto?

ACTUALIZAR

Para aclarar, estoy familiarizado con el concepto de examinar mis .emacs en una búsqueda binaria para identificar el código que causa un problema. En esta situación, sé exactamente qué paquetes ya están causando el problema. Lo que no sé es cómo usar el package-sistema para cargar solo esos pocos paquetes.

(package-initialize)cargará los paquetes, pero también todo lo demás en mi .emacs.d/elpadirectorio. package-load-listme permite especificar versiones particulares de paquetes para cargar, o paquetes particulares para excluir explícitamente . Necesito lo contrario: cómo suministrar a Emacs una lista de paquetes para incluir , sin cargar ningún otro paquete en el sistema elpa / package.

Tyler
fuente
Si ha aislado el problema a un número finito de paquetes, puede intentar reproducir el problema comenzando desde un .emacsarchivo en blanco : instale cada paquete uno por uno y luego vea si el problema aún existe. Puede sorprenderse y encontrar el paquete responsable que no se adapta bien al otro paquete. Cuando haya ido lo más lejos que pueda, escriba los pasos que utilizó para reproducir el problema y envíe el informe de error, por ejemplo, comenzando desde Emacs -Q , instale el paquete A, luego instale el paquete B, luego instale el paquete C, luego abra el *Scratch*búfer y escriba ...
lawlist
Lo que dijo @lawlist. Si no está seguro de haber reducido las cosas por completo, use la búsqueda binaria: elimine un 1/2 arbitrario de lo que tiene que repros el problema (por ejemplo, elimine 2 paquetes de 4). Luego quite 3/4, 7/8, ... cortando el código necesario para reproducirlo por la mitad cada vez. De manera similar, puede cortar el código de un paquete dado en 1/2, etc., para reducir las cosas a un pequeño código necesario para reprogramarlo. Puede usar el comando comment-regionpara comentar (o, con C-u, para descomentar) una región de texto.
Dibujó
Entiendo esto en un nivel de pseudocódigo. No entiendo cómo, utilizando la familia de comandos de paquetes, carga solo un subconjunto de los paquetes en su. Directorio emacs.d / elpa
Tyler
Anteriormente, un responsable de
Tyler
1
package-load-list es una forma de incluir explícitamente paquetes, simplemente elimine el allsímbolo.
npostavs

Respuestas:

10

La package-load-listvariable se puede usar para especificar con precisión qué paquetes y versiones cargar:

List of packages for `package-initialize' to load.
Each element in this list should be a list (NAME VERSION), or the
symbol `all'.  The symbol `all' says to load the latest installed
versions of all packages not specified by other elements.

For an element (NAME VERSION), NAME is a package name (a symbol).
VERSION should be t, a string, or nil.
If VERSION is t, the most recent version is activated.
If VERSION is a string, only that version is ever loaded.
 Any other version, even if newer, is silently ignored.
 Hence, the package is "held" at that version.
If VERSION is nil, the package is not loaded (it is "disabled").

Lo único a tener en cuenta es que el valor predeterminado incluye all, si setqlo haces, estarás bien porque eso sobrescribe completamente el valor original.

(require 'package)
(setq package-load-list
      '((package1 "4.2")
        (package2 "0.5.1")))
(package-initialize)
npostavs
fuente
4

Una opción que funcionaría bien en contextos donde los desarrolladores que trabajan en la reproducción del error pueden no tener (o desear) esas dependencias instaladas es usar el trypaquete ( https://melpa.org/#/try ). Otros pueden cargar paquetes desde la administración de paquetes sin modificar su instalación local.

(package-install 'try)
(require 'try)

(try 'some-package)
(try 'some-other-package)

(steps (to reproduce) (the (problem)))
ebpa
fuente
2

Este caso de uso es una deficiencia terrible package.el, así que no lo use package.el. En su lugar, use un administrador de paquetes como straight.el(Soy el autor), que fue diseñado específicamente para admitir este caso de uso.

Para obtener documentación detallada sobre straight.el, incluidas las comparaciones con otros gestores de paquetes, consulte el archivo README . A continuación, he citado la sección que es relevante para su pregunta.

Utilizando straight.elpara reproducir errores

Una de las principales razones por las que quería escribir straight.elera que los administradores de paquetes existentes no eran buenos para reproducir errores. Por ejemplo, algunos de ellos cargarían todos los paquetes instalados cuando se inicializó el administrador de paquetes. Obviamente, eso no es aceptable para un "caso de prueba mínimo".

Por el contrario, el arranque straight.elno carga nada excepto por straight.elsí mismo (los repositorios de recetas predeterminados se registran, pero no se clonan hasta que se necesitan). Normalmente deberías cargar straight.elmediante el fragmento de arranque , pero cuando estés dentro emacs -Q, así es como puedes inicializar straight.el:

M-x load-file RET ~/.emacs.d/straight/bootstrap.el RET

También puede hacer esto desde la línea de comandos, quizás creando un alias para ello:

$ emacs -Q -l ~/.emacs.d/straight/bootstrap.el

Digamos que está haciendo un informe de error para Projectile. Para cargar solo Projectile y todas sus dependencias, ejecute:

M-x straight-use-package RET projectile RET

Tenga en cuenta que esto utilizará las revisiones actualmente desprotegidas de Projectile y todas sus dependencias, por lo que debe tomar nota de ellas para hacer su informe de error.

Radon Rosborough
fuente
0

Cuando lo necesita por una sola vez (por ejemplo, para probar y probar una receta para reproducir un error), a menudo puede salirse con la suya:

emacs -Q -l ~/.emacs.d/elpa/<pkg>-<vers>/<pkg>-autoloads.el

Dije "a menudo" porque no prestará atención a las dependencias, por lo que en algunos casos necesitará agregar más de esos -l ...argumentos para cargar los otros paquetes que se necesitan.

Stefan
fuente