Vad är filformatet PICKLE?
Filer med filändelsen .pickle lagrar Python-objekt serialiserade med modulen pickle, Pythons inbyggda bibliotek för objektserialisering. Både .pickle och .pkl är utbytbara filändelser för samma format; .pickle är den längre explicita formen medan .pkl är den kompakta treteckensvarianten som använts sedan Python 1.x.
Innehåll i Python Pickle-filer
Serialiserade objekt i .pickle-filer kan vara av vilken Python-typ som helst. .pickle-filer används för att serialisera databasobjekt, cacha vikter för maskininlärningsmodeller eller lagra programtillstånd mellan körningar. Endast .pickle-filer från betrodda källor bör användas, eftersom sådana filer kan innehålla skadlig programvara - deserialisering av en obetrodd pickle kan köra godtycklig Python-kod. Pickle-objekt kan komprimeras externt med gzip, bz2 eller lzma.
Hur skapas Python PICKLE-filer?
Serialiseringsprocessen kallas «pickling» och görs med metoderna dump() och dumps(). Metoden dump() används för att serialisera ett objekt till en fil, medan dumps() sparar objektet som ett bytes-objekt. Deserialisering - att konvertera byteströmmen tillbaka till originalobjektet - görs med load() och loads(); denna process kallas «unpickling».
Pickle-protokollversionen styr det binära formatet. Protokoll 0 är läsbar ASCII; protokoll 1-5 är progressivt binära, där protokoll 5 (Python 3.8+) lägger till out-of-band-buffertar för effektiv hantering av stora .NPY-arrayer. Inom arbetsflöden för maskininlärning används .pickle i stor utsträckning för att spara scikit-learn-modeller och PyTorch-kontrollpunkter, även om SafeTensors vinner mark som ett säkrare alternativ för just modellvikter.
Säkerhet & trygghet
RISK: HIGHKRITISK VARNING: Pickle-filer kan köra godtycklig Python-kod när de laddas. En skadlig .pickle-fil kan radera filer, ladda ner skadlig kod eller ta över ett system. Ladda aldrig en pickle-fil från en okänd källa. I ML/AI-arbetsflöden är skadliga pickles i modellarkiv (Hugging Face Hub, GitHub) en aktiv hotvektor. Använd picklescan för att skanna filer innan de laddas, eller byt till SafeTensors-formatet för modellvikter. CVE-2025-1889: picklescan < 0.0.22 kunde kringgås genom att använda icke-standardiserade filändelser inuti arkivbaserade modellpaket.
Formatdetaljer
i ett nötskalProgram som öppnar PICKLE-filer
Tekniska detaljer
djup specifikation| Filkodning | Binär (protokoll 1-5); läsbara ASCII-opkoder (protokoll 0) |
| Magic bytes | 0x80 följt av protokollversionens byte; t.ex. 0x80 0x05 för protokoll 5 (Python 3.8+); protokoll 0 har ingen binär magic |
| Pickle-protokoll | 0 (ASCII, Python 1.x); 1 (binär, Python 1.x); 2 (new-style classes, Python 2.3+); 3 (bytes, Python 3.0+); 4 (objekt >4 GB, Python 3.4+); 5 (out-of-band-buffertar, Python 3.8+) |
| Standardprotokoll | Protokoll 5 är standard i Python 3.8 och senare |
| Komprimering | Ingen inbyggd; paketeras vanligtvis externt i gzip, bz2 eller lzma; joblib lägger till ett eget komprimeringslager |
| Kryptering | Ingen - ingen inbyggd kryptering; kryptera på filsystemsnivå eller via ett omslag vid behov |
| Typisk filstorlek | Under 1 MB för modellkonfigurationer; 1 MB - flera GB för ML-modellvikter och stora dataset |
| Säkerhetsrisk | Deserialisering av obetrodd pickle-data kan köra godtycklig Python-kod via __reduce__-hooks - unpickla aldrig filer från okända källor |
| Intern struktur | Ström av pickle-opkoder som kodar Python-objekt rekursivt; protokoll 4+ använder ramar för segmenterad strömning; protokoll 5 lägger till out-of-band-buffertar för zero-copy av stora arrayer |
| MIME-typ | application/octet-stream (formellt); application/x-pickle (informellt) |
| Plattformsoberoende | Plattformsoberoende; körs på alla operativsystem som stöds av Python (Windows, Linux, macOS) |
| Serialiserings-API | dump() och dumps() för pickling; load() och loads() för unpickling |
| ML/AI-användning | Primärt serialiseringsformat för scikit-learn-modeller och PyTorch-kontrollpunkter; SafeTensors vinner mark som ett säkrare alternativ för modellvikter |
| Släppt | 1994 (Python 1.1; pickle module first released) |
| Senaste version | Protocol 5 (Python 3.8, 2019); default protocol 5 from Python 3.14 |
| Öppen standard | Ja · royaltyfri |
| Specifikation | docs.python.org |
PICKLE-konverteringar
Frågor & svar
frågat av användareInga frågor än - bli den första att fråga om PICKLE-filer.