export()

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

当前工作目录将是 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)

有 2 个文件始终导出到缓存,而无需在 recipe 中显式定义: conanfile.py recipe,以及 conandata.yml 文件(如果存在)。 只要加载 conanfile.py,就会自动加载 conandata.yml 文件,成为 self.conan_data 属性,因此它是 recipe 的固有部分,因此它是“导出”的 recipe 文件的一部分,而不是“导出”的源文件的一部分。

注意

最佳实践

  • recipe 文件必须独立于配置。 这些文件对于所有配置都是通用的,因此无法对不同的设置、选项或平台进行条件 export() 。 不要尝试进行任何类型的条件导出。 如果有必要,一次导出所有配置所需的所有文件。

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

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

  • 导出的文件必须很小。 使用 recipe 导出大文件会使依赖项的解析速度变慢。

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