El gestor de paquetes Pkg.jl viene integrado con Julia desde el principio. No es un addon externo como pip o npm: es parte de la instalación base y tiene reproducibilidad de entornos por diseño. Si vienes de Python, el modelo se parece más al de Rust con Cargo que al de pip con virtualenv.
Pkg.jl: uso básico
Hay dos formas de usar Pkg: el modo interactivo en el REPL (pulsando ]) o llamando a las funciones directamente con using Pkg:
# Modo función (en scripts o código)
using Pkg
Pkg.add("DataFrames") # instalar paquete
Pkg.add(["CSV", "Plots", "Flux"]) # varios a la vez
Pkg.update() # actualizar todos
Pkg.update("DataFrames") # actualizar uno
Pkg.remove("DataFrames") # desinstalar
Pkg.status() # ver paquetes instalados
# Modo interactivo (en el REPL, pulsar ] para entrar en modo Pkg) # pkg> add DataFrames # pkg> add CSV Plots Flux # pkg> update # pkg> remove DataFrames # pkg> status # pkg> instantiate (instalar lo que indica Manifest.toml)
Entornos con Project.toml y Manifest.toml
Cada proyecto Julia tiene dos ficheros de dependencias. Project.toml declara las dependencias directas con rangos de versión aceptables. Manifest.toml captura las versiones exactas de todas las dependencias (incluyendo las transitivas) para reproducibilidad total.
# Activar un entorno local (crea Project.toml y Manifest.toml en el directorio actual)
Pkg.activate(".")
# O activar al arrancar Julia:
# julia --project=.
# Una vez activado, add instala en el entorno local, no el global
Pkg.add("DataFrames")
Pkg.add("CSV")
El Project.toml generado tiene esta pinta:
# Project.toml (lo editas tú) [deps] CSV = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" DataFrames = "a93c6f00-e57d-5684-b466-afe8fa294f15" [compat] CSV = "0.10" DataFrames = "1" julia = "1.10"
El Manifest.toml lo genera Pkg automáticamente y no deberías editarlo a mano. Al hacer Pkg.instantiate() en otro ordenador con el mismo Manifest.toml, se instalan exactamente las mismas versiones.
Paquetes esenciales en 2026
El registro general de Julia (General Registry) tiene más de 10.000 paquetes. Estos son los más usados en ciencia de datos y computación científica:
Paquete | Uso |
DataFrames.jl | Datos tabulares, equivalente a pandas |
CSV.jl | Leer y escribir CSV con alto rendimiento |
Plots.jl | Visualización, frontend multi-backend |
Makie.jl | Visualización avanzada e interactiva |
Flux.jl | Machine learning y redes neuronales |
Zygote.jl | Diferenciación automática reverse mode |
ForwardDiff.jl | Diferenciación automática forward mode |
CUDA.jl | GPU computing con NVIDIA CUDA |
DifferentialEquations.jl | Solvers de EDOs/EDPs, muy completo |
Turing.jl | Programación probabilística bayesiana |
Symbolics.jl | Álgebra simbólica nativa en Julia |
PyCall.jl | Llamar a Python desde Julia |
RCall.jl | Llamar a R desde Julia |
Pluto.jl | Notebooks reactivos |
IJulia.jl | Kernel de Julia para Jupyter |
DifferentialEquations.jl: el caso especial
DifferentialEquations.jl merece mención aparte porque es, sin exageración, la librería de resolución de ecuaciones diferenciales más completa del mundo en cualquier lenguaje. Cubre EDOs, EDAs, EDPs, ecuaciones estocásticas y de retardo, con más de 100 solvers y selección automática del más apropiado:
using DifferentialEquations
# Ecuación de Lorenz (sistema caótico)
function lorenz!(du, u, p, t)
?, ?, ? = p
du[1] = ? * (u[2] - u[1])
du[2] = u[1] * (? - u[3]) - u[2]
du[3] = u[1] * u[2] - ? * u[3]
end
u0 = [1.0, 0.0, 0.0]
tspan = (0.0, 100.0)
p = (10.0, 28.0, 8/3)
problema = ODEProblem(lorenz!, u0, tspan, p)
solucion = solve(problema, Tsit5()) # solver Runge-Kutta adaptativo
# La solución es interpolable
u_en_t50 = solucion(50.0)
Turing.jl: estadística bayesiana
using Turing
# Modelo bayesiano simple
@model function modelo_normal(datos)
mu ~ Normal(0, 10) # prior para la media
sigma ~ InverseGamma(2, 3) # prior para la desviación típica
for i in eachindex(datos)
datos[i] ~ Normal(mu, sigma)
end
end
datos_obs = randn(100) .* 2 .+ 5 # datos simulados con mu=5, sigma=2
modelo = modelo_normal(datos_obs)
chain = sample(modelo, NUTS(), 1000) # MCMC con No-U-Turn Sampler
Añadir un paquete de GitHub (no registrado)
# Instalar directamente desde un repositorio git Pkg.add(url="https://github.com/usuario/MiPaquete.jl") # Instalar un branch específico Pkg.add(url="https://github.com/usuario/MiPaquete.jl", rev="dev")
El ecosistema de Julia en 2026 tiene cobertura sólida para computación científica, machine learning y estadística. Las áreas donde todavía hay menos opciones que en Python son desarrollo web, procesamiento de imágenes general y herramientas de UI. Para esas áreas, la interoperabilidad con Python es la salida práctica. Todo lo demás, desde redes neuronales hasta análisis de datos, tiene alternativas nativas maduras.
Imagen: Pexels / Daniil Komov
