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
请参阅本节中的示例。
从缓存中删除未使用的包¶
警告
最近最少使用功能处于预览阶段。有关更多信息,请参阅Conan 稳定性部分。
Conan 缓存不实现任何自动过期策略,因此除非定期删除包或缓存,否则其大小将一直增加。可以删除最近未使用的配方和包,同时保留在给定时间段内使用的配方和包(最近最少使用 LRU 策略)。这可以通过 conan remove
和 conan list
命令的 --lru
参数来完成:
# 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。