¿Qué es el formato de archivo PICKLE?
Los archivos con la extensión .pickle almacenan objetos de Python serializados mediante el módulo pickle, la biblioteca de serialización de objetos integrada de Python. Tanto .pickle como .pkl son extensiones intercambiables para el mismo formato; .pickle es la forma explícita más larga, mientras que .pkl es la variante compacta de tres caracteres en uso desde Python 1.x.
Contenido de los archivos Python Pickle
Los objetos serializados en archivos .pickle pueden ser de cualquier tipo de Python. Los archivos .pickle se utilizan para serializar objetos de bases de datos, almacenar en caché pesos de modelos de aprendizaje automático o guardar el estado del programa entre ejecuciones. Solo deben utilizarse archivos .pickle de fuentes confiables, ya que dichos archivos pueden contener software malicioso: la deserialización de un pickle no confiable puede ejecutar código Python arbitrario. Los objetos Pickle pueden comprimirse externamente usando gzip, bz2 o lzma.
¿Cómo se crean los archivos PICKLE de Python?
El proceso de serialización se denomina «pickling» y se realiza mediante los métodos dump() y dumps(). El método dump() se utiliza para serializar un objeto en un archivo, mientras que dumps() guarda el objeto como un objeto de bytes. La deserialización -convertir el flujo de bytes de nuevo al objeto original- se realiza mediante load() y loads(); este proceso se conoce como «unpickling».
La versión del protocolo pickle controla el formato binario. El Protocolo 0 es ASCII legible por humanos; los Protocolos 1-5 son progresivamente binarios, y el Protocolo 5 (Python 3.8+) añade búferes fuera de banda para el manejo eficiente de grandes matrices .NPY. En los flujos de trabajo de aprendizaje automático, .pickle se utiliza ampliamente para persistir modelos de scikit-learn y puntos de control de PyTorch, aunque SafeTensors está ganando adopción como una alternativa más segura específicamente para los pesos de los modelos.
Seguridad y protección
RIESGO: HIGHADVERTENCIA CRÍTICA: Los archivos Pickle pueden ejecutar código Python arbitrario cuando se cargan. Un archivo .pickle malicioso puede eliminar archivos, descargar malware o tomar el control de un sistema. Nunca cargue un archivo pickle de una fuente no confiable. En los flujos de trabajo de ML/AI, los pickles maliciosos en los repositorios de modelos (Hugging Face Hub, GitHub) son un vector de amenaza activo. Use picklescan para escanear archivos antes de cargarlos, o cambie al formato SafeTensors para los pesos de los modelos. CVE-2025-1889: picklescan < 0.0.22 podía omitirse utilizando extensiones de archivo no estándar dentro de paquetes de modelos basados en archivos comprimidos.
Detalles del formato
en pocas palabrasProgramas que abren archivos PICKLE
Detalles técnicos
especificación profunda| Codificación de archivo | Binario (protocolos 1-5); opcodes ASCII legibles por humanos (protocolo 0) |
| Bytes mágicos | 0x80 seguido del byte de versión del protocolo; p. ej., 0x80 0x05 para el protocolo 5 (Python 3.8+); el protocolo 0 no tiene magia binaria |
| Protocolos Pickle | 0 (ASCII, Python 1.x); 1 (binario, Python 1.x); 2 (clases de nuevo estilo, Python 2.3+); 3 (bytes, Python 3.0+); 4 (objetos >4 GB, Python 3.4+); 5 (búferes fuera de banda, Python 3.8+) |
| Protocolo predeterminado | El Protocolo 5 es el predeterminado en Python 3.8 y versiones posteriores |
| Compresión | Ninguna integrada; comúnmente envuelto externamente en gzip, bz2 o lzma; joblib añade su propia capa de compresión |
| Cifrado | Ninguno - no hay cifrado integrado; cifre a nivel de sistema de archivos o de envoltura si es necesario |
| Tamaño de archivo típico | Menos de 1 MB para configuraciones de modelos; de 1 MB a varios GB para pesos de modelos de ML y grandes conjuntos de datos |
| Riesgo de seguridad | La deserialización de datos pickle no confiables puede ejecutar código Python arbitrario a través de ganchos __reduce__ - nunca deserialice archivos de fuentes no confiables |
| Estructura interna | Flujo de opcodes de pickle que codifican objetos de Python de forma recursiva; el Protocolo 4+ utiliza marcos para la transmisión por fragmentos; el Protocolo 5 añade búferes fuera de banda para la copia cero de matrices grandes |
| Tipo MIME | application/octet-stream (formal); application/x-pickle (informal) |
| Multiplataforma | Independiente de la plataforma; se ejecuta en cualquier SO compatible con Python (Windows, Linux, macOS) |
| API de serialización | dump() y dumps() para serializar; load() y loads() para deserializar |
| Uso en ML/AI | Formato de serialización principal para modelos de scikit-learn y puntos de control de PyTorch; SafeTensors está ganando adopción como una alternativa más segura para los pesos de los modelos |
| Lanzado | 1994 (Python 1.1; pickle module first released) |
| Última versión | Protocol 5 (Python 3.8, 2019); default protocol 5 from Python 3.14 |
| Estándar abierto | Sí · libre de regalías |
| Especificación | docs.python.org |
Conversiones de PICKLE
Preguntas y respuestas de la comunidad
preguntado por usuariosAún no hay preguntas; sea el primero en preguntar sobre los archivos PICKLE.