PyYAML 互換性
pyrs-yaml は PyYAML の代替品を提供し、移行を容易にします。
シンプルな移行¶
シンプルな移行
# 旧コード
import yaml
data = yaml.safe_load(yaml_text)
yaml_str = yaml.safe_dump(data)
# 新コード
import pyrs_yaml as yaml
data = yaml.safe_load(yaml_text)
yaml_str = yaml.safe_dump(data)
互換 API¶
| PyYAML 関数 | pyrs-yaml 対応 | 備考 |
|---|---|---|
yaml.safe_load() |
pyrs_yaml.safe_load() |
同等 |
yaml.safe_loads() |
pyrs_yaml.safe_loads() |
同等 |
yaml.safe_dump() |
pyrs_yaml.safe_dump() |
同等 |
yaml.safe_dumps() |
pyrs_yaml.safe_dumps() |
同等 |
yaml.load() |
pyrs_yaml.safe_load() |
安全バリアントを使用 |
yaml.dump() |
pyrs_yaml.safe_dump() |
安全バリアントを使用 |
主な違い¶
pyrs-yaml が優れている点¶
| 機能 | PyYAML | pyrs-yaml |
|---|---|---|
| 往復保存 | コメント/アンカーを失う | すべて保持 |
| パフォーマンス | ベースライン | 解析で21〜43倍、シリアライズで55〜177倍高速 |
| 型ヒント | 部分的 | 完全な .pyi スタブ |
| ABI3 wheel | 該当なし | すべての Python バージョンに対応 |
| i18n エラー | 英語のみ | 英語 + 中国語 |
注意すべき点¶
- アンカー/エイリアスの処理: PyYAML は往復時にアンカーを失う; pyrs-yaml は保持する
- コメントの位置: pyrs-yaml は複雑なネスト構造でコメントの順序を変更する場合がある
- フロースタイル: 両方とも保持するが、出力フォーマットが若干異なる場合がある
- エラーメッセージ: pyrs-yaml はより詳細なコンテキスト付きの i18n エラーメッセージを使用
移行チェックリスト¶
-
import yamlをimport pyrs_yaml as yamlに置換 - すべての YAML パース/保存ワークフローをテスト
- 往復出力が期待通りであることを確認
- アンカー/エイリアスの動作を確認(使用している場合)
- カスタムエラーメッセージ用のエラーハンドリングを確認
移行例¶
完全な移行例
# 旧コード
import yaml
def load_config(path):
with open(path) as f:
return yaml.safe_load(f)
def save_config(data, path):
with open(path, "w") as f:
yaml.safe_dump(data, f)
# 新コード
import pyrs_yaml
def load_config(path):
return pyrs_yaml.parse_file(path).to_dict()
def save_config(data, path):
pyrs_yaml.dump_file(data, path)