14 Copying Packages

zhangly 2021-03-15 19:01:47
Categories: > Tags:

概述

包可以从一个库复制到另一个库,就像这样。
使用命令:

]$ rez-cp --dest-path /svr/packages2 my_pkg-1.2.3

使用API:

>>> from rez.package_copy import copy_package
>>> from rez.packages import get_latest_package
>>>
>>> p = get_latest_package("python")
>>> p
Package(FileSystemPackageResource({'location': '/home/ajohns/packages', 'name': 'python', 'repository_type': 'filesystem', 'version': '3.7.4'}))

>>> r = copy_package(p, "./repo2")
>>>
>>> print(pprint.pformat(r))
{
    'copied': [
        (
            Variant(FileSystemVariantResource({'location': '/home/ajohns/packages', 'name': 'python', 'repository_type': 'filesystem', 'index': 0, 'version': '3.7.4'})),
            FileSystemVariantResource({'location': '/home/ajohns/repo2', 'name': 'python', 'repository_type': 'filesystem', 'index': 0, 'version': '3.7.4'})
        )
    ],
    'skipped': []
}

复制包实际上每次只复制一个变体,当然也可以指定复制包的某些变体,而不是整个包。
API调用的返回值显示了被复制的变量copied中的二元组分别列出了源和目标。

注意:不要直接复制包目录,应当使用rez-cp。直接复制可能会导致resolve缓存问题。

启用

复制包功能是默认启用的,如果你想指定哪些可以被重定位,哪些不可重定位。

可以通过包定义文件中设置relocatable=False来标记包为不可重定位。

还有些配置会影响,可以参考default_relocatable,default_relocatable_per_package 和 default_relocatable_per_repository。

试图复制一个不可重定位的包会引发一个PackageCopyError
请注意,-force选项会覆盖这一点,使用时风险自负。