如何填充conandata.yml?能否向其中写入代码执行时间?
关于conandata.yml的填充与写入操作
一、基础填充conandata.yml
conandata.yml是Conan用于存储包元数据(版本、源码地址、哈希值等)的配置文件,手动填充直接遵循YAML语法编辑即可:
- 示例基础结构(存储版本与源码信息):
sources: "1.0.0": url: "https://example.com/foo-1.0.0.tar.gz" sha256: "abcdef1234567890abcdef1234567890" "2.0.0": url: "https://example.com/foo-2.0.0.tar.gz" sha256: "0987654321fedcba0987654321fedcba"
- 若要添加自定义字段(比如你需要的执行时间),直接在文件中新增节点:
custom_data: execution_time: 0.0
二、程序化写入conandata.yml
如果需要动态写入内容(比如计算执行时间后自动更新),可以用Python脚本结合pyyaml库实现,步骤如下:
- 先安装依赖库:
pip install pyyaml - 核心逻辑:读取现有文件→修改数据→写回文件
三、计算代码执行时间并写入的示例
以下是完整的脚本示例,可直接复用:
import yaml import time # 替换为你需要计时的代码逻辑 def target_code(): # 示例:模拟耗时操作 time.sleep(1.5) # 计算执行时间 start = time.time() target_code() cost_time = round(time.time() - start, 2) # 读取conandata.yml(文件不存在则初始化空字典) try: with open("conandata.yml", "r") as f: conandata = yaml.safe_load(f) or {} except FileNotFoundError: conandata = {} # 更新执行时间字段 if "custom_data" not in conandata: conandata["custom_data"] = {} conandata["custom_data"]["execution_time"] = cost_time # 写回文件(sort_keys=False保持原有字段顺序) with open("conandata.yml", "w") as f: yaml.dump(conandata, f, sort_keys=False, default_flow_style=False)
执行后,conandata.yml的custom_data节点会被更新为:
custom_data: execution_time: 1.51
注意事项
- 用
yaml.safe_load而非yaml.load,避免潜在安全风险 - 如果是在Conan recipe中执行,可将这段逻辑嵌入
build()或自定义方法中,直接操作recipe内的conandata对象 - 写入时保留
sort_keys=False,防止打乱手动配置的字段顺序
内容的提问来源于stack exchange,提问作者SidJ25
相关产品推荐
相关产品推荐

