export()¶
等同于 exports
属性,但以方法形式存在。此方法将在 export
阶段被调用,此阶段发生在 conan export
、conan export-pkg
和 conan create
命令中,旨在允许将文件从用户文件夹复制到 Conan 缓存文件夹中,从而使这些文件成为配方(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 个文件总是会被导出到缓存中,而无需在配方中显式定义:conanfile.py
配方文件,以及(如果存在的话)conandata.yml
文件。conandata.yml
文件在 conanfile.py
加载时会自动加载,成为 self.conan_data
属性,因此它是配方固有的一部分,属于“导出的”配方文件,而非“导出的”源文件。
注意
最佳实践
配方文件必须与配置无关。这些文件对所有配置都是通用的,因此无法针对不同的设置(settings)、选项(options)或平台(platforms)进行有条件的
export()
操作。请勿尝试进行任何形式的条件导出。如有必要,请一次性导出所有配置所需的所有文件。export()
方法不接收来自配置文件(profiles)的任何信息,甚至不接收conf
。只有global.conf
可用,并且无论如何都无法使用该conf
来定义条件。保持
export()
方法的简洁性。其目的是将文件从用户文件夹复制到缓存中,以便将这些文件与配方一起存储。导出的文件必须很小。将大文件与配方一起导出,将大大降低依赖项的解析速度。
只有对
conanfile.py
配方进行评估所必需的文件,才应通过此方法导出。从源代码构建所需的文件,应通过exports_sources
属性或 export_source() 方法导出。