¿Qué es el formato de archivo PKL?
Un archivo .pkl contiene un objeto de Python serializado mediante el módulo pickle de la biblioteca estándar de Python. El proceso de «pickling» convierte casi cualquier estructura de datos de Python (diccionarios, listas, instancias de clases, arreglos de NumPy, modelos de aprendizaje automático entrenados) en un flujo de bytes que puede guardarse en el disco y restaurarse más tarde con pickle.load().
El formato utiliza una Máquina Virtual Pickle (PVM) basada en una pila: un flujo de códigos de operación (opcodes) de un solo byte que, al ejecutarse, reconstruyen el objeto original. Las versiones del protocolo van desde el Protocolo 0 (opcodes basados en texto, Python 1.2) hasta el Protocolo 5 (Python 3.8+, PEP 574, que admite búferes fuera de banda para grandes arreglos de NumPy). El Protocolo 4 (bytes mágicos 80 04 95) es el predeterminado en Python 3.8-3.11. No existe un esquema fijo; la estructura del flujo de bytes está determinada enteramente por el objeto que se está serializando.
El uso moderno predominante es guardar modelos de ML entrenados de scikit-learn, PyTorch (torch.save envuelve a pickle internamente) y XGBoost, así como el almacenamiento en caché de resultados computados costosos. La biblioteca joblib (que también usa pickle) es preferible para grandes arreglos de NumPy debido a su soporte de mapeo de memoria.
Advertencia de seguridad: cargar un archivo .pkl de una fuente no confiable puede ejecutar código arbitrario de Python. Las alternativas más seguras incluyen .json para datos simples, HDF5 o Parquet para datos tabulares, y ONNX o safetensors para modelos de ML. Las extensiones .pkl y .pickle son totalmente intercambiables.
Seguridad y protección
RIESGO: HIGHPython Pickle puede ejecutar código arbitrario durante la carga (a través del opcode __reduce__ / REDUCE). Un archivo .pkl malicioso es un vector de ataque de ejecución de código; trátelo como un ejecutable. Solo cargue archivos .pkl de fuentes en las que confíe plenamente. Para compartir modelos de ML, prefiera safetensors (HuggingFace) o el formato ONNX, que no pueden ejecutar código al cargarse. La documentación de pickle advierte explícitamente: «El módulo pickle no es seguro».
Detalles del formato
en pocas palabras- Microsoft Exchange Migration Wizard Packing List - La herramienta heredada de migración de Microsoft Exchange utilizaba .pkl para listas de empaque; no tiene ninguna relación con el pickle de Python.
Programas que abren archivos PKL
Detalles técnicos
especificación profunda| Codificación | Flujo binario de códigos de operación para la Máquina Virtual Pickle (PVM) |
| Bytes mágicos del Protocolo 4 | 80 04 95 en el desplazamiento 0 (Python 3.4+; predeterminado en Python 3.8-3.11) |
| Bytes mágicos del Protocolo 5 | 80 05 en el desplazamiento 0 (Python 3.8+, PEP 574, soporte de búfer fuera de banda para NumPy) |
| Bytes mágicos del Protocolo 2 | 80 02 en el desplazamiento 0 (Python 2.3+, soporte para clases de nuevo estilo, PEP 307) |
| Rango de protocolos | Protocolo 0 (opcodes de texto, 1995) hasta el Protocolo 5 (Python 3.8+, 2019) |
| Estructura de datos | Flujo plano de opcodes con pila de operandos y tabla de notas; el opcode STOP (0x2E) marca el final del flujo |
| Esquema | Sin esquema fijo; la estructura se determina enteramente por el objeto de Python que se está serializando |
| Tipo MIME | application/octet-stream (sin tipo MIME registrado) |
| Tamaño de archivo típico | 1 KB - varios GB (desde pequeños diccionarios hasta grandes tensores de pesos de modelos de ML) |
| Riesgo de seguridad | Posible ejecución de código arbitrario de Python en pickle.load() desde fuentes no confiables |
| Portabilidad entre lenguajes | Solo Python; ningún otro lenguaje puede leer o escribir este formato de forma nativa |
| Uso moderno principal | Guardar modelos de scikit-learn, pesos de PyTorch (torch.save), modelos de XGBoost, cálculos en caché |
| Extensión intercambiable | .pickle es idéntico en formato y totalmente intercambiable con .pkl |
| Biblioteca relacionada | joblib envuelve a pickle con optimizaciones de mapeo de memoria adecuadas para grandes arreglos de NumPy |
| Lanzado | 1995 (Python 1.2, original pickle module) |
| Última versión | Protocol 5 (Python 3.8+, PEP 574, 2019) |
| Especificación | docs.python.org |