Conan 1.54:新增 conanfile.win_bash_run 和 tools.microsoft.bash:active 配置,新增 upload_policy='skip' 以避免上传二进制文件,新增 Git().included_files() 工具以获取不在 .gitignore 中的文件,并在 global.conf Jinja 渲染中添加了 distro 包。
我们很高兴地宣布 Conan 1.54 现已发布,并带来了一些重要的新功能和错误修复。首先,此版本提供了一个新的 ConanFile.win_bash_run
属性和一个 tools.microsoft.bash:active
配置,以便更精确地管理 Windows Bash。此外,新的 ConanFile.upload_policy
类方法提供了一种跳过配方二进制文件上传的方式。我们添加了一个新的 Git.included_files()
方法来获取git中包含且不在.gitignore中的文件。最后,distro
包被添加到 Linux 平台上 Jinja global.conf 模板的上下文中。
此外,值得注意的是,Conan 2.0-beta5 本月也已发布,并包含了一些新功能和修复。
新增 ConanFile.win_bash_run 属性和 tools.microsoft.bash:active
从 Conan 1.55 开始,您可以更好地配置 Conan 如何与 Windows 子系统 进行交互,使其更加精确。
-
ConanFile.win_bash_run。
win_bash_run
属性等效于win_bash
属性,但适用于run
范围。这意味着,如果您设置win_bash_run=True
,则通过self.run(cmd, scope="run")
调用的所有命令都将在 bash shell 中运行。 -
tools.microsoft.bash:active。 使用 tools.microsoft.bash:active,您可以定义 Conan 是否已在子系统 (Msys2) 终端中运行。然后,任何使用
self.run
运行的命令(也取决于win_bash_run
和win_bash
的值)如果tools.microsoft.bash:active
未定义或为False
,则会显式地在 bash 中运行该命令。
新增 ConanFile.upload_policy
有时,您可能希望跳过将 Conan 包上传到远程服务器。最典型的案例是下载大型二进制工具(android-ndk 或类似工具)的包。在这种情况下,将这些二进制文件重新打包成 .tgz
Conan 包没有太大意义,这可能需要大量时间。对于这些情况,您可以将 ConanFile 中的 upload_policy
类属性设置为 skip
值。
...
class AndroidNDKConan(ConanFile):
name = "android-ndk"
...
upload_policy = 'skip'
...
然后,如果您将 Conan 包上传到服务器,则会上传配方,但不会上传任何二进制文件。
➜ conan upload android-ndk/r25@ -c --all -r myremote
android-ndk/r25: Skipping upload of binaries, because upload_policy='skip'
...
Uploaded conan recipe 'android-ndk/r25' to 'myremote': https://...
此策略与 build_policy = "missing"
协同工作,如果未上传二进制文件,则很可能希望这些二进制文件自动“构建”(尽管它们通常不是从源代码构建的,而只是下载一个包含预编译二进制文件的大型存档),并且不需要在命令行中显式使用 --build
。
新增 Git.included_files() 方法
此 新的 Git 工具方法 返回不在.gitignore列表中的文件列表。例如,如果您想实现仅导出这些文件的操作,这将非常实用。
from conan import ConanFile
from conan.tools.scm import Git
...
class MyPackages(ConanFile):
...
def export_sources(self):
git = Git(self)
included = git.included_files()
for i in included:
dst = os.path.join(self.export_sources_folder, i)
os.makedirs(os.path.dirname(dst), exist_ok=True)
shutil.copy2(i, dst)
在 global.conf 中将 distro 包添加到 Jinja 上下文
您可能知道,您可以在 global.conf 中使用 Jinja2 模板引擎。当 Conan 加载此文件时,会立即解析并渲染模板,这必须生成标准的 tools-configuration 文本。传递给所有平台的模板渲染的 Python 包为 os
和 platform
。从 1.55 版本开始,distro
包也传递给 Linux。如果您有一个依赖于 Linux 发行版的配置,这将非常有用。例如,您可以在global.conf文件中根据发行版设置默认配置文件。
...
core:default_profile={{distro.id()}}
...
然后,Conan 将使用以发行版名称(ubuntu、debian、centos 等)命名的配置文件作为默认主机配置文件名称。
Conan 2.0-beta5 发布
我们刚刚发布了 Conan 2.0 beta5。您可以使用pip安装它。
$ pip install conan --pre
此新的 beta 版本包含了一些新功能和修复。其中一些功能包括:
- 改进了远程管理和 API。
- 简化了.tgz文件的压缩和解压缩,并保留了解压缩文件的的时间戳。
- 改进了锁文件:新的 LockfileAPI 和 conan export 中的锁文件生成。
如果您想开始尝试新功能,请查看 Conan 2.0 文档。
除了上面列出的项目之外,还有一些较小的错误修复,您可能希望了解。如果是这样,请参阅 更改日志 以获取完整列表。
我们希望您喜欢此版本,并期待您的 反馈。