Qu'est-ce que le format de fichier PICKLE ?
Les fichiers avec l'extension .pickle stockent des objets Python sérialisés à l'aide du module pickle, la bibliothèque de sérialisation d'objets intégrée à Python. Les extensions .pickle et .pkl sont interchangeables pour le même format ; .pickle est la forme explicite longue tandis que .pkl est la variante compacte à trois caractères utilisée depuis Python 1.x.
Contenu des fichiers Python Pickle
Les objets sérialisés dans les fichiers .pickle peuvent être de n'importe quel type Python. Les fichiers .pickle sont utilisés pour sérialiser des objets de base de données, mettre en cache les poids de modèles d'apprentissage automatique (machine-learning) ou stocker l'état d'un programme entre deux exécutions. Seuls les fichiers .pickle provenant de sources fiables doivent être utilisés, car ces fichiers peuvent contenir des logiciels malveillants - la désérialisation d'un pickle non fiable peut exécuter du code Python arbitraire. Les objets Pickle peuvent être compressés de l'extérieur à l'aide de gzip, bz2 ou lzma.
Comment les fichiers Python PICKLE sont-ils créés ?
Le processus de sérialisation est appelé « pickling » et s'effectue à l'aide des méthodes dump() et dumps(). La méthode dump() est utilisée pour sérialiser un objet dans un fichier, tandis que dumps() enregistre l'objet sous forme d'objet bytes. La désérialisation - la conversion du flux d'octets en l'objet d'origine - s'effectue à l'aide de load() et loads() ; ce processus est appelé « unpickling ».
La version du protocole pickle contrôle le format binaire. Le protocole 0 est en ASCII lisible par l'homme ; les protocoles 1 à 5 sont progressivement binaires, le protocole 5 (Python 3.8+) ajoutant des tampons hors bande pour une gestion efficace des grands tableaux .NPY. Dans les flux de travail d'apprentissage automatique, .pickle est largement utilisé pour conserver les modèles scikit-learn et les points de contrôle PyTorch, bien que SafeTensors gagne du terrain en tant qu'alternative plus sûre spécifiquement pour les poids de modèles.
Sécurité et sûreté
RISQUE : HIGHAVERTISSEMENT CRITIQUE : Les fichiers Pickle peuvent exécuter du code Python arbitraire lors de leur chargement. Un fichier .pickle malveillant peut supprimer des fichiers, télécharger des logiciels malveillants ou prendre le contrôle d'un système. Ne chargez jamais un fichier pickle provenant d'une source non fiable. Dans les flux de travail ML/IA, les pickles malveillants dans les dépôts de modèles (Hugging Face Hub, GitHub) sont un vecteur de menace actif. Utilisez picklescan pour analyser les fichiers avant de les charger, ou passez au format SafeTensors pour les poids de modèles. CVE-2025-1889 : picklescan < 0.0.22 pouvait être contourné en utilisant des extensions de fichiers non standard dans des paquets de modèles basés sur des archives.
Détails du format
en brefProgrammes qui ouvrent les fichiers PICKLE
Détails techniques
spécifications approfondies| Encodage du fichier | Binaire (protocoles 1-5) ; opcodes ASCII lisibles par l'homme (protocole 0) |
| Signature de fichier (magic bytes) | 0x80 suivi de l'octet de version du protocole ; par ex. 0x80 0x05 pour le protocole 5 (Python 3.8+) ; le protocole 0 n'a pas de signature binaire |
| Protocoles Pickle | 0 (ASCII, Python 1.x) ; 1 (binaire, Python 1.x) ; 2 (classes de nouveau style, Python 2.3+) ; 3 (octets, Python 3.0+) ; 4 (objets >4 Go, Python 3.4+) ; 5 (tampons hors bande, Python 3.8+) |
| Protocole par défaut | Le protocole 5 est le protocole par défaut dans Python 3.8 et versions ultérieures |
| Compression | Aucune intégrée ; couramment encapsulé de l'extérieur dans gzip, bz2 ou lzma ; joblib ajoute sa propre couche de compression |
| Chiffrement | Aucun - pas de chiffrement intégré ; chiffrez au niveau du système de fichiers ou de l'encapsuleur si nécessaire |
| Taille de fichier typique | Moins de 1 Mo pour les configurations de modèles ; 1 Mo à plusieurs Go pour les poids de modèles ML et les grands jeux de données |
| Risque de sécurité | La désérialisation de données pickle non fiables peut exécuter du code Python arbitraire via les hooks __reduce__ - ne désérialisez jamais de fichiers provenant de sources non fiables |
| Structure interne | Flux d'opcodes pickle encodant des objets Python de manière récursive ; le protocole 4+ utilise des trames pour le streaming par morceaux ; le protocole 5 ajoute des tampons hors bande pour une copie zéro des grands tableaux |
| Type MIME | application/octet-stream (formel) ; application/x-pickle (informel) |
| Multiplateforme | Indépendant de la plateforme ; fonctionne sur n'importe quel système d'exploitation supporté par Python (Windows, Linux, macOS) |
| API de sérialisation | dump() et dumps() pour le pickling ; load() et loads() pour l'unpickling |
| Utilisation ML/IA | Format de sérialisation principal pour les modèles scikit-learn et les points de contrôle PyTorch ; SafeTensors gagne du terrain comme alternative plus sûre pour les poids de modèles |
| Publié | 1994 (Python 1.1; pickle module first released) |
| Dernière version | Protocol 5 (Python 3.8, 2019); default protocol 5 from Python 3.14 |
| Standard ouvert | Oui · libre de droits |
| Spécification | docs.python.org |
Conversions PICKLE
Q&R de la communauté
posées par les utilisateursPas encore de questions - soyez le premier à poser une question sur les fichiers PICKLE.