export_sources()

等同于 exports_sources 属性,但以方法形式存在。 此方法将在 export 时调用,该调用发生在 conan exportconan export-pkgconan create 命令中,它旨在允许将文件从用户文件夹复制到 Conan 缓存文件夹,这些文件成为配方源的一部分。 这些源将与配方一起上传到服务器,但通常不会下载,除非该软件包正在从源代码构建。

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

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

class Pkg(ConanFile):
    def export_sources(self):
        # This LICENSE.md is a source file intended to be part of the final package
        # it is not the license of the current recipe
        copy(self, "LICENSE.md", self.recipe_folder, self.export_sources_folder)

该方法可能能够读取配方文件夹中的文件并对其执行某些操作

import os
from conan import ConanFile
from conan.tools.files import load, save

class Pkg(ConanFile):

    def export_sources(self):
        content = load(self, os.path.join(self.recipe_folder, "data.txt"))
        save(self, os.path.join(self.export_sources_folder, "myfile.txt"), content)

export_conandata_patches() 是一个高级辅助函数,用于导出在 conandata.yml 文件中定义的补丁,这些补丁稍后可以在 source() 方法中使用 apply_conandata_patches() 应用。

from conan.tools.files import export_conandata_patches

class Pkg(ConanFile):

    def export_sources(self):
        export_conandata_patches(self)

注意

最佳实践

  • 配方源必须与配置无关。 这些源对于所有配置都是通用的,因此不可能对不同的设置、选项或平台执行有条件的 export_sources()。 不要尝试进行任何类型的条件导出。 如果有必要,一次性导出所有配置所需的所有文件。

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

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