Vad är filformatet PKL?
En .pkl-fil innehåller ett Python-objekt serialiserat med modulen pickle från Pythons standardbibliotek. Pickling konverterar nästan vilken Python-datastruktur som helst - dictionaries, listor, klassinstanser, NumPy-arrayer, tränade maskininlärningsmodeller - till en bitström som kan sparas på disk och senare återställas med pickle.load().
Formatet använder en stackbaserad Pickle Virtual Machine (PVM): en ström av enkelbytes-opkoder som, när de exekveras, rekonstruerar det ursprungliga objektet. Protokollversioner sträcker sig från Protocol 0 (textbaserade opkoder, Python 1.2) till Protocol 5 (Python 3.8+, PEP 574, med stöd för out-of-band-buffertar för stora NumPy-arrayer). Protocol 4 (magic bytes 80 04 95) är standard i Python 3.8-3.11. Det finns inget fast schema; bitströmmens struktur bestäms helt av objektet som serialiseras.
Den dominerande moderna användningen är att spara tränade ML-modeller från scikit-learn, PyTorch (torch.save omsluter pickle internt) och XGBoost, samt att cacha resurskrävande beräkningsresultat. Biblioteket joblib (som också använder pickle) föredras för stora NumPy-arrayer på grund av stöd för minnesmappning.
Säkerhetsvarning: Att ladda en .pkl-fil från en otillförlitlig källa kan exekvera godtycklig Python-kod. Säkrare alternativ inkluderar .json för enkla data, HDF5 eller Parquet för tabelldata, samt ONNX eller safetensors för ML-modeller. Filändelserna .pkl och .pickle är helt utbytbara.
Säkerhet & trygghet
RISK: HIGHPython Pickle kan exekvera godtycklig kod under inläsning (via __reduce__ / REDUCE-opkod). En skadlig .pkl-fil är en attackvektor för kodexekvering - hantera den som en körbar fil. Ladda endast .pkl-filer från källor du litar på fullständigt. För delning av ML-modeller, föredra safetensors (HuggingFace) eller ONNX-formatet som inte kan exekvera kod vid inläsning. Dokumentationen för pickle varnar uttryckligen: «The pickle module is not secure.»
Formatdetaljer
i ett nötskal- Microsoft Exchange Migration Wizard Packing List - Äldre migreringsverktyg för Microsoft Exchange använde .pkl för packlistor; helt orelaterat till Python pickle.
Program som öppnar PKL-filer
Tekniska detaljer
djup specifikation| Kodning | Binär opkod-ström för Pickle Virtual Machine (PVM) |
| Protocol 4 magic bytes | 80 04 95 vid offset 0 (Python 3.4+; standard i Python 3.8-3.11) |
| Protocol 5 magic bytes | 80 05 vid offset 0 (Python 3.8+, PEP 574, stöd för out-of-band-buffert för NumPy) |
| Protocol 2 magic bytes | 80 02 vid offset 0 (Python 2.3+, stöd för new-style classes, PEP 307) |
| Protokollomfång | Protocol 0 (text-opkoder, 1995) till Protocol 5 (Python 3.8+, 2019) |
| Datastruktur | Platt opkod-ström med operand-stack och memo-tabell; STOP-opkod (0x2E) markerar slutet på strömmen |
| Schema | Inget fast schema; strukturen bestäms helt av det Python-objekt som serialiseras |
| MIME-typ | application/octet-stream (ingen registrerad MIME-typ) |
| Typisk filstorlek | 1 KB - flera GB (från små dicts till stora ML-modellens vikttensorer) |
| Säkerhetsrisk | Exekvering av godtycklig Python-kod är möjlig vid pickle.load() från otillförlitliga källor |
| Portabilitet mellan språk | Endast Python; inget annat språk kan läsa eller skriva detta format nativt |
| Primär modern användning | Spara scikit-learn-modeller, PyTorch-vikter (torch.save), XGBoost-modeller, cachade beräkningar |
| Utbytbar filändelse | .pickle är identisk i formatet och helt utbytbar med .pkl |
| Relaterat bibliotek | joblib omsluter pickle med minnesmappnings-optimeringar lämpade för stora NumPy-arrayer |
| Släppt | 1995 (Python 1.2, original pickle module) |
| Senaste version | Protocol 5 (Python 3.8+, PEP 574, 2019) |
| Specifikation | docs.python.org |