Hva er PKL-filformatet?
En .pkl-fil inneholder et Python-objekt serialisert ved hjelp av pickle-modulen fra Pythons standardbibliotek. «Pickling» konverterer nesten alle Python-datastrukturer - ordbøker, lister, klasseinstanser, NumPy-tabeller, trente maskinlæringsmodeller - til en bitstrøm som kan lagres til disk og senere gjenopprettes med pickle.load().
Formatet bruker en stabelbasert Pickle Virtual Machine (PVM): en strøm av enkelt-byte opkoder som, når de utføres, rekonstruerer det opprinnelige objektet. Protokollversjoner varierer fra Protokoll 0 (tekstbaserte opkoder, Python 1.2) til Protokoll 5 (Python 3.8+, PEP 574, som støtter «out-of-band»-buffere for store NumPy-tabeller). Protokoll 4 (magiske byte 80 04 95) er standard i Python 3.8-3.11. Det finnes ikke noe fast skjema; bitstrømmens struktur bestemmes helt av objektet som serialiseres.
Den dominerende moderne bruken er lagring av trente ML-modeller fra scikit-learn, PyTorch (torch.save pakker inn pickle internt) og XGBoost, samt hurtigbufring av tunge beregningsresultater. Biblioteket joblib (som også bruker pickle) foretrekkes for store NumPy-tabeller på grunn av støtte for minne-mapping.
Sikkerhetsadvarsel: Innlasting av en .pkl-fil fra en upålitelig kilde kan kjøre vilkårlig Python-kode. Sikrere alternativer inkluderer .json for enkle data, HDF5 eller Parquet for tabulære data, og ONNX eller safetensors for ML-modeller. Filendelsene .pkl og .pickle er helt utbyttbare.
Sikkerhet og trygghet
RISIKO: HIGHPython Pickle kan kjøre vilkårlig kode under innlasting (via __reduce__ / REDUCE-opkode). En ondsinnet .pkl-fil er en angrepsvektor for kodekjøring - behandle den som en kjørbar fil. Last bare inn .pkl-filer fra kilder du stoler fullstendig på. For deling av ML-modeller, foretrekk safetensors (HuggingFace) eller ONNX-formatet som ikke kan kjøre kode ved innlasting. Pickle-dokumentasjonen advarer eksplisitt: «The pickle module is not secure.»
Formatdetaljer
i et nøtteskall- Microsoft Exchange Migration Wizard Packing List - Eldre Microsoft Exchange-migreringsverktøy brukte .pkl for pakkelister; helt urelatert til Python pickle.
Programmer som åpner PKL-filer
Tekniske detaljer
dyp spesifikasjon| Koding | Binær opkode-strøm for Pickle Virtual Machine (PVM) |
| Protokoll 4 magiske byte | 80 04 95 ved offset 0 (Python 3.4+; standard i Python 3.8-3.11) |
| Protokoll 5 magiske byte | 80 05 ved offset 0 (Python 3.8+, PEP 574, støtte for out-of-band buffer for NumPy) |
| Protokoll 2 magiske byte | 80 02 ved offset 0 (Python 2.3+, støtte for «new-style» klasser, PEP 307) |
| Protokollområde | Protokoll 0 (tekst-opkoder, 1995) til Protokoll 5 (Python 3.8+, 2019) |
| Datastruktur | Flat opkode-strøm med operand-stabel og memo-tabell; STOP-opkode (0x2E) markerer slutten på strømmen |
| Skjema | Ingen fast skjema; strukturen bestemmes helt av Python-objektet som serialiseres |
| MIME-type | application/octet-stream (ingen registrert MIME-type) |
| Typisk filstørrelse | 1 KB - flere GB (små ordbøker til store ML-modellvekt-tensorer) |
| Sikkerhetsrisiko | Kjøring av vilkårlig Python-kode er mulig ved pickle.load() fra upålitelige kilder |
| Portabilitet mellom språk | Kun Python; ingen andre språk kan lese eller skrive dette formatet innebygd |
| Primær moderne bruk | Lagring av scikit-learn-modeller, PyTorch-vekter (torch.save), XGBoost-modeller, hurtigbufrede beregninger |
| Utbyttbar filendelse | .pickle er identisk i format og helt utbyttbar med .pkl |
| Relatert bibliotek | joblib pakker inn pickle med minne-mapping-optimaliseringer egnet for store NumPy-tabeller |
| Utgitt | 1995 (Python 1.2, original pickle module) |
| Siste versjon | Protocol 5 (Python 3.8+, PEP 574, 2019) |
| Spesifikasjon | docs.python.org |