¿Cómo aseguro la repetibilidad del código de Julia y las dependencias asociadas?

Aug 19 2020

Digamos que tengo un proyecto en el que estoy realizando un análisis (es decir, no busco desarrollar un paquete compartible), pero quiero asegurarme de que otros puedan clonar el repositorio e instanciar las dependencias y ejecutar el código tal como está escrito.

Pasos que he tomado hasta ahora:

  1. Código creado en su propia carpeta
  2. Hice esa carpeta en un entorno de Julia ( activate .en el modo de paquete de REPL)
  3. added los paquetes que estoy usando

¿Esto bloquea las versiones de las dependencias? ¿O necesito agregar manualmente [compat]entradas al Project.tomlarchivo? Si las [compat]entradas son necesarias, ¿hay alguna forma de incluir automáticamente esa entrada al addenviar el paquete?

¿Existe un enfoque general para garantizar la reproducibilidad?

Respuestas

5 KristofferCarlsson Aug 19 2020 at 18:42

¿Esto bloquea las versiones de las dependencias?

Si confirma su Project.tomly Manifest.tomlluego alguien puede clonar el repositorio, active ese proyecto y import Pkg; Pkg.instantiate()descargue exactamente las mismas versiones que están registradas en el manifiesto.

3 fredrikekre Aug 19 2020 at 18:42

¿Esto bloquea las versiones de las dependencias?

Sí, en el sentido de que las versiones exactas se registran en el Manifest.tomlarchivo, por lo que, mientras ese archivo no se modifique, se bloquean.

¿O necesito agregar manualmente [compat]entradas al Project.tomlarchivo?

No tienes que hacer esto. Esto solo importa cuando alguien realiza una operación de paquete que invoca al resolutor, por ejemplo pkg> add ...o pkg> up. Si su código se basa en alguna versión específica de un paquete, siempre puede agregar esto a la [compat]sección. Por ejemplo, si confía en una función que requiere la Xversión 1.3.0 del paquete, puede agregar

[compat]
X = "1.3"

Esto garantizará que, incluso si alguien invoca la resolución de paquetes, al menos obtendrá la versión 1.3 de package X.