¿Cómo aseguro la repetibilidad del código de Julia y las dependencias asociadas?
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:
- Código creado en su propia carpeta
- Hice esa carpeta en un entorno de Julia (
activate .
en el modo de paquete de REPL) add
ed los paquetes que estoy usando
¿Esto bloquea las versiones de las dependencias? ¿O necesito agregar manualmente [compat]
entradas al Project.toml
archivo? Si las [compat]
entradas son necesarias, ¿hay alguna forma de incluir automáticamente esa entrada al add
enviar el paquete?
¿Existe un enfoque general para garantizar la reproducibilidad?
Respuestas
¿Esto bloquea las versiones de las dependencias?
Si confirma su Project.toml
y Manifest.toml
luego 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.
¿Esto bloquea las versiones de las dependencias?
Sí, en el sentido de que las versiones exactas se registran en el Manifest.toml
archivo, por lo que, mientras ese archivo no se modifique, se bloquean.
¿O necesito agregar manualmente
[compat]
entradas alProject.toml
archivo?
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 X
versió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
.