我们很高兴地宣布 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_runwin_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_runwin_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 包为 osplatform。从 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 文档



除了上面列出的项目之外,还有一些较小的错误修复,您可能希望了解。如果是这样,请参阅 更改日志 以获取完整列表。

我们希望您喜欢此版本,并期待您的 反馈