概要
- Python 3.15 で導入予定の lazy import 構文提案
- lazy import は、指定したモジュールの 読み込み・実行を初回アクセス時まで遅延
- 起動時間短縮・メモリ節約 など、特にCLIツールや大規模アプリで有効
- 従来のimport文との 後方互換性を完全維持
- 明示的・局所的・安全に インクリメンタル導入 可能
PEP: 明示的な lazy import 構文の導入
- lazy import 構文の新設による、遅延インポート機能の明文化
- 例: lazy import json
- 例: lazy from json import dumps
- 通常のimport文 は即時インポート、 lazy import は初回利用時まで遅延
- 不要な依存モジュールの即時ロード回避 による、アプリ起動の高速化
- メモリ使用量の削減 と、実際に必要なコードパスのみ依存解決
- コマンドラインツール・テストスイート・大規模依存アプリ での有用性
- 既存のimport文は影響なし、lazy指定時のみ遅延動作
- if TYPE_CHECKING: など型チェック用インポートの最適化
- 局所的・明示的・逐次的な導入 を重視した設計
- 依存グラフの可視性維持、import分散による可読性低下を回避
- LazyLoader やサードパーティ実装との差別化
- lazy_modules による、旧バージョンとの互換サポート
- dictの改変やグローバルフラグ方式は不採用、安全性と最適化重視
動機と利点
- モジュール先頭でのimport集中 が従来の慣例
- これにより 依存関係の明示性 と 一度きりの評価 を実現
- 即時インポートによる無駄な依存ロード が、起動遅延・メモリ増大の原因
- 関数内import による手動遅延手法は、保守性・依存追跡性に課題
- 標準ライブラリ分析 でも、約17%が遅延目的で関数内importを採用
- lazy import構文 により、 依存の一元管理・明示的遅延 を両立
- CLIツールの起動時間50-70%短縮、メモリ30-40%削減の実績
- 型アノテーション用import のランタイム負荷ゼロ化
- 大規模アプリの未使用サブシステムのメモリ節約
設計上の根拠と意思決定
- 明示的なlazyキーワード の導入で意図を明確化
- import文単位での局所的適用、依存先へのカスケードはなし
- 辞書(dict)の改変回避、プロキシオブジェクト方式で安全性確保
- 通常importとの区別を容易化、後方互換性の維持
- lazy_modules による段階的導入サポート
- インクリメンタルな導入 で既存コードベースへの影響最小化
- グローバルスイッチ による一括適用も選択肢として用意
他の設計判断
- 遅延のスコープは完全にローカル (import文ごと)
- グローバルなlazy import制御 も可能(大規模アプリ・テスト環境向け)
- 辞書(dict)のサブクラス化やグローバルフラグ案は不採用
- Pythonオブジェクトの根幹であるdictの最適化・安全性重視
- プロキシ方式 で初回アクセス時に通常importへ置換
- CLIツール開発者などが段階的に導入できる構成
このPEPは、 Pythonのimport機構に明示的な遅延インポート機能 を加えることで、 起動時間・メモリ効率・依存管理性 の向上を目指すものです。 既存コードとの互換性・導入のしやすさ・安全性 を重視した設計となっています。