PICKLE ファイル形式とは?
拡張子 .pickle を持つファイルは、Python の組み込みオブジェクトシリアル化ライブラリである pickle モジュールを使用してシリアル化された Python オブジェクトを格納します。.pickle と .pkl は同じ形式の互換性のある拡張子です。.pickle はより長い明示的な形式であり、.pkl は Python 1.x 以降で使用されているコンパクトな3文字のバリアントです。
Python Pickle ファイルの内容
.pickle ファイル内のシリアル化されたオブジェクトは、あらゆる Python 型にすることができます。.pickle ファイルは、データベースオブジェクトのシリアル化、機械学習モデルの重みのキャッシュ、または実行間でのプログラム状態の保存に使用されます。信頼できるソースからの .pickle ファイルのみを使用してください。これらのファイルには悪意のあるソフトウェアが含まれている可能性があるためです。信頼できない pickle をデシリアル化すると、任意の Python コードが実行される可能性があります。Pickle オブジェクトは、gzip、bz2、または lzma を使用して外部で圧縮できます。
Python PICKLE ファイルはどのように作成されますか?
シリアル化プロセスは «pickling» と呼ばれ、dump() および dumps() メソッドを使用して行われます。dump() メソッドはオブジェクトをファイルにシリアル化するために使用され、dumps() はオブジェクトを bytes オブジェクトとして保存します。デシリアル化(バイトストリームを元のオブジェクトに戻すこと)は load() および loads() を使用して行われ、このプロセスは «unpickling» と呼ばれます。
pickle プロトコルのバージョンによってバイナリ形式が制御されます。プロトコル 0 は人間が読める形式の ASCII です。プロトコル 1〜5 は段階的にバイナリ化されており、プロトコル 5(Python 3.8以降)では、大きな .NPY 配列を効率的に処理するためのアウトオブバンドバッファが追加されています。機械学習のワークフローでは、.pickle は scikit-learn モデルや PyTorch のチェックポイントを永続化するために広く使用されていますが、特にモデルの重みについては、より安全な代替手段として SafeTensors の採用が進んでいます。
セキュリティと安全性
リスク: HIGH重大な警告: Pickle ファイルは読み込み時に任意の Python コードを実行できます。悪意のある .pickle ファイルは、ファイルの削除、マルウェアのダウンロード、またはシステムの乗っ取りを行う可能性があります。信頼できないソースからの pickle ファイルは絶対に読み込まないでください。ML/AI ワークフローにおいて、モデルリポジトリ(Hugging Face Hub, GitHub)内の悪意のある pickle はアクティブな脅威ベクトルです。読み込む前に picklescan を使用してファイルをスキャンするか、モデルの重みには SafeTensors 形式を使用してください。CVE-2025-1889: picklescan < 0.0.22 は、アーカイブベースのモデルパッケージ内で非標準の拡張子を使用することでバイパスされる可能性がありました。
形式の詳細
概要PICKLE ファイルを開くプログラム
import pickle; data = pickle.load(open('file.pickle','rb')); print(data) 技術的詳細
詳細仕様| ファイルエンコーディング | バイナリ(プロトコル 1-5)、人間が読める ASCII オペコード(プロトコル 0) |
| マジックバイト | 0x80 の後にプロトコルバージョンのバイトが続く。例:プロトコル 5(Python 3.8+)の場合は 0x80 0x05。プロトコル 0 にはバイナリマジックはありません |
| Pickle プロトコル | 0 (ASCII, Python 1.x); 1 (バイナリ, Python 1.x); 2 (新スタイルクラス, Python 2.3+); 3 (bytes, Python 3.0+); 4 (4 GB を超えるオブジェクト, Python 3.4+); 5 (アウトオブバンドバッファ, Python 3.8+) |
| デフォルトプロトコル | Python 3.8 以降ではプロトコル 5 がデフォルトです |
| 圧縮 | 組み込み機能はなし。一般的に gzip, bz2, lzma で外部的にラップされる。joblib は独自の圧縮レイヤーを追加します |
| 暗号化 | なし - 組み込みの暗号化はありません。必要に応じてファイルシステムまたはラッパーレベルで暗号化してください |
| 典型的なファイルサイズ | モデル設定の場合は 1 MB 未満。ML モデルの重みや大規模なデータセットの場合は 1 MB 〜 数 GB |
| セキュリティリスク | 信頼できない pickle データをデシリアル化すると、__reduce__ フックを介して任意の Python コードが実行される可能性があります。信頼できないソースからのファイルは絶対に unpickle しないでください |
| 内部構造 | Python オブジェクトを再帰的にエンコードする pickle オペコードのストリーム。プロトコル 4 以降はチャンクストリーミングにフレームを使用。プロトコル 5 は大きな配列のゼロコピーのためにアウトオブバンドバッファを追加 |
| MIME タイプ | application/octet-stream (公式); application/x-pickle (非公式) |
| クロスプラットフォーム | プラットフォームに依存しない。Python がサポートされているすべての OS (Windows, Linux, macOS) で動作 |
| シリアル化 API | pickling 用の dump() および dumps()。unpickling 用の load() および loads() |
| ML/AI での使用 | scikit-learn モデルおよび PyTorch チェックポイントの主要なシリアル化形式。モデルの重みについては、より安全な代替手段として SafeTensors の採用が進んでいます |
| リリース日 | 1994 (Python 1.1; pickle module first released) |
| 最新バージョン | Protocol 5 (Python 3.8, 2019); default protocol 5 from Python 3.14 |
| オープンスタンダード | はい · ロイヤリティフリー |
| 仕様書 | docs.python.org |
PICKLE の変換
コミュニティ Q&A
ユーザーからの質問まだ質問はありません。PICKLE ファイルについて最初の質問をしてみましょう。
よくある質問
.pickle ファイルを開くにはどうすればよいですか?
import pickle; data = pickle.load(open('file.pickle', 'rb'))。信頼できるソースからのファイルのみを読み込んでください。pickle は任意のコードを実行する可能性があります。.pickle と .pkl の違いは何ですか?
pickle ファイルを開いても安全ですか?
pickle ファイルを JSON に変換できますか?
json.dump(pickle.load(open('file.pickle','rb')), open('out.json','w'))。複雑なオブジェクト(NumPy 配列、クラスインスタンス)にはカスタムシリアライザが必要です。pickle を保存するときはどの Python プロトコルを使用すべきですか?
pickle.dump(obj, f, protocol=5) のように指定します。なぜ pickle ファイルのサイズが大きいのですか?
pickle.dump(obj, gzip.open('file.pkl.gz','wb'))、SafeTensors/HDF5 に切り替えてください。Excel やスプレッドシートで pickle ファイルを開けますか?
df.to_csv('out.csv')。