其他重要的 Conan 特性¶
python_requires¶
可以使用 python_requires 特性 重用其他配方中的代码。
如果您维护许多不同包的配方,并且它们共享一些通用逻辑,并且不想在每个配方中重复代码,可以将该通用代码放在一个 Conan conanfile.py 中,将其上传到您的服务器,并让其他配方 conanfile 执行 python_requires = "mypythoncode/version" 以依赖它并重用它。
包列表¶
可以使用“packages-list”特性一起管理包、配方和二进制文件。 诸如 upload、download 和 remove 等多个命令允许接收一个包文件列表作为输入,并且可以对该列表执行其操作。 一个典型的用例是“将上次构建的包上传到服务器 conan create”,这可以通过
$ conan create . --format=json > build.json
$ conan list --graph=build.json --graph-binaries=build --format=json > pkglist.json
$ conan upload --list=pkglist.json -r=myremote -c
请参阅本节中的 示例。
从缓存中删除未使用的包¶
警告
(lru) 最少最近使用特性处于 预览 阶段。 有关更多信息,请参阅 Conan 稳定性 部分。
Conan 缓存不实施任何自动过期策略,因此除非删除包或不时删除缓存,否则其大小将始终增加。 可以删除最近未使用的配方和包,同时保留在给定时间段内使用过的那些(最少最近使用 LRU 策略)。 这可以通过将 --lru 参数传递给 conan remove 和 conan list 命令来完成
# remove all binaries (but not recipes) not used in the last 4 weeks
$ conan remove "*:*" --lru=4w -c
# remove all recipes that have not been used in the last 4 weeks (with their binaries)
$ conan remove "*" --lru=4w -c
请注意,LRU 时间遵循 remove 命令的规则。 如果我们使用 "*" 模式删除配方,则只会检查配方的 LRU 时间。 如果最近使用了某个配方,它将保留所有二进制文件,如果该配方最近未被使用,它将删除自身及其所有二进制文件。 如果我们使用 "*:*" 模式,它将仅检查二进制文件并删除未使用的二进制文件,但始终保留配方。
首先使用 conan list(请注意,conan list 默认情况下不列出所有修订版本,与 remove 不同,因此需要显式指定 #* 以选择所有修订版本,如果这是意图)可以创建一个最近最少使用的包列表
# List all unused (last 4 weeks) recipe revisions
$ conan list "*#*" --lru=4w --format=json > old.json
# Remove those recipe revisions (and their binaries)
$ conan remove --list=old.json -c
请参阅命令帮助 conan remove 和 conan list。