【发布时间】:2015-11-07 21:05:05
【问题描述】:
我在yaml 中定义了一个如下所示的映射:
default: &DEFAULT
bucket: &bucket default_path
# Make sure that the second parameter of join doesn't start with a /
# otherwise it is interpreted as an absolute path and join won't work
path1: !!python/object/apply:os.path.join [*bucket, work_area/test1]
path2: !!python/object/apply:os.path.join [*bucket, work_area/test2]
我需要定义更多键,其中唯一要覆盖的值是bucket,比如:
production:
<<: *DEFAULT
bucket: "s3://production-bucket"
但我仍然得到conf['production']['path1'] => 'default_path/work_area/test1'
而不是conf['production']['path1'] => 's3://production-bucket/work_area/test1'.yaml有没有办法做到这一点?
从语法中可以看出,我使用pyyaml 来解析文件。
【问题讨论】:
-
您使用的是哪个版本的 PyYAML?在 3.10 中,当我尝试重新定义
bucket锚时出现 ComposerError。 -
感谢您的评论。我实际上使用的是 3.11,但我在问题中复制粘贴了错误的大小写。我现在编辑它。当使用`bucket:&bucket "s3://production-bucket"`时我也得到了
ComposerError -
现在你永远不会重新定义锚
bucket。我认为您对映射键使用与锚相同的名称会使自己感到困惑,但这与定义锚(和解析别名)完全无关。看我的回答。