export()

等同于 exports 属性,但采用方法形式。此方法将在 export 阶段调用,该阶段发生在 conan exportconan export-pkgconan create 命令中,其目的是允许将文件从用户文件夹复制到 Conan 缓存文件夹,从而使文件成为配方的一部分。这些源文件将与配方一起上传到服务器,并始终与配方一起下载。

当前工作目录将是 self.recipe_folder,并且可以使用 self.export_folder 作为目标文件夹来使用 copy() 或自定义复制。

from conan import ConanFile
from conan.tools.files import copy

class Pkg(ConanFile):
    def export(self):
        # This LICENSE file is intended to be the license of the current conanfile.py recipe
        # and go with it. It is not intended to be the license of the final package (for that
        # purpose export_sources() would be recommended)
        copy(self, "LICENSE.md", self.recipe_folder, self.export_folder)

有两个文件总是会被导出到缓存中,而无需在配方中显式定义:conanfile.py 配方本身,以及如果存在的话的 conandata.yml 文件。conandata.yml 文件在 conanfile.py 加载时会自动加载,成为 self.conan_data 属性,因此它是配方的固有部分,属于“导出”的配方文件,而不是“导出”的源文件。

注意

最佳实践

  • 配方文件必须与配置无关。这些文件对所有配置都是通用的,因此不能根据不同的设置、选项或平台进行条件 export()。请勿尝试进行任何形式的条件导出。如有必要,请一次性导出所有配置所需的所有文件。

  • export() 方法不接收来自 profile 的任何信息,甚至包括 conf。只有 global.conf 可用,并且在任何情况下都无法使用该 conf 来定义条件。

  • 保持 export() 方法简单。其目的是将文件从用户文件夹复制到缓存中,以便与配方一起存储这些文件。

  • 导出的文件必须很小。随配方导出大文件将导致依赖项解析变得非常慢。

  • 只有对评估 conanfile.py 配方有必要的文件,才必须使用此方法导出。从源构建所需的文件应使用 exports_sources 属性或 export_source() 方法导出。