conan.tools.system.package_manager¶
conan.tools.system.package_manager 下的工具是围绕一些不同平台上最流行的系统包管理器进行封装的。您可以使用它们在配方中调用系统包管理器并执行最常见的操作,例如安装包、更新包管理器数据库或检查包是否已安装。默认情况下,当您调用它们时,它们不会尝试在系统上安装任何内容,要更改此行为,您可以设置 tools.system.package_manager:mode
配置 的值。
您可以在配方的 system_requirements()
方法中使用这些工具,例如
from conan.tools.system.package_manager import Apt, Yum, PacMan, Zypper
def system_requirements(self):
# depending on the platform or the tools.system.package_manager:tool configuration
# only one of these will be executed
Apt(self).install(["libgl-dev"])
Yum(self).install(["libglvnd-devel"])
PacMan(self).install(["libglvnd"])
Zypper(self).install(["Mesa-libGL-devel"])
Conan 会通过查看操作系统名称自动选择要使用的哪个包管理器。在上面的示例中,如果我们在 Ubuntu Linux 上运行,Conan 将忽略除 Apt()
之外的所有调用,并且只会尝试使用 apt-get
工具安装包。Conan 默认使用以下映射
对于发行版名称为 ubuntu、debian、raspbian 或 linuxmint 的 **Linux**,使用 Apt
对于发行版名称为 pidora、scientific、xenserver、amazon、oracle、amzn、almalinux 或 rocky 的 **Linux**,使用 Yum
对于发行版名称为 fedora、rhel、centos、mageia 的 **Linux**,使用 Dnf
对于发行版名称为 alpine 的 **Linux**,使用 Apk
对于 **macOS**,使用 Brew
对于发行版名称为 arch、manjaro 的 **Linux** 以及使用 msys2 的 **Windows**,使用 PacMan
对于 **Windows**,使用 Chocolatey
对于发行版名称为 opensuse、sles 的 **Linux**,使用 Zypper
对于 **FreeBSD**,使用 Pkg
对于 **Solaris**,使用 PkgUtil
您可以覆盖此默认映射并设置要默认使用的包管理器工具,方法是设置配置属性 tools.system.package_manager:tool。
系统包管理器工具可用的方法¶
所有这些包装器都共享三种方法,这些方法代表了使用系统包管理器的最常见操作。除了 Apt 还接受 install 方法 的 recommends 参数外,它们对所有包管理器的形式都相同。
install(self, packages, update=False, check=True, host_package=True):
尝试安装作为参数传递的包列表。如果参数check
为True
,它将在安装它们之前检查这些包是否已安装。如果参数update
为True
,它将在检查和安装之前尝试更新包管理器数据库。其行为受tools.system.package_manager:mode
配置 的值影响。如果参数host_package
为True
,它将为主机机器架构(将运行软件的机器)安装包,在交叉构建时有效。此方法将返回执行的命令的返回值。install_substitutes(packages_substitutes, update=False, check=True)
: 尝试安装作为参数传递的替换包列表列表,例如[["pkg1", "pkg2"], ["pkg3"]]
。如果替换列表之一完全安装,则它将成功,因此它旨在用于当您对不同的发行版使用不同的包时。在内部,它调用了之前的install(packages, update=update, check=check)
方法,因此update
和check
与上面具有相同的用途。update()
更新系统包管理器数据库。其行为受tools.system.package_manager:mode
配置 的值影响。check(packages)
检查作为参数传递的包列表是否已安装。它将返回一个包含缺少的包的列表。
影响系统包管理器调用方式的配置属性¶
如上所述,有一些 [conf]
影响这些工具的调用方式
tools.system.package_manager:tool
: 选择要默认使用的包管理器工具:"apk"
、"apt-get"
、"yum"
、"dnf"
、"brew"
、"pacman"
、"choco"
、"zypper"
、"pkg"
或"pkgutil"
tools.system.package_manager:mode
: 调用包管理器工具时使用的模式。有两个可能的值"check"
: 它最多只会检查缺少的包,并且无论如何都不会尝试更新包管理器数据库或安装任何包。如果系统中未安装必需的包,它将引发错误。这是默认值。"report"
: 只捕获.install()
调用以捕获包,但不检查也不安装它们。从不引发错误。主要用于conan graph info
命令。"report-installed"
: 报告(不失败)哪些包是需要的(与report
相同),并检查其中哪些实际上安装在当前系统中。"install"
: 它将允许 Conan 执行更新或安装操作。
tools.system.package_manager:sudo
: 在 Linux 中调用包管理器工具时使用 sudo(默认值为False
)tools.system.package_manager:sudo_askpass
: 如果在 Linux 中使用 sudo 调用系统包管理器,则使用-A
参数(默认值为False
)
每个工具都有一些特定的参数。以下是完整参考
conan.tools.system.package_manager.Apk¶
将调用 apk 命令。对于发行版名称为 alpine 的 **Linux**,默认启用。
参考¶
- class Apk(conanfile, _arch_names=None)¶
构造方法。请注意,Apk 不支持体系结构名称,因为 Alpine Linux 不支持多体系结构。因此,
arch_names
参数被忽略。- 参数:
conanfile – 当前配方对象。始终使用
self
。
- check(*args, **kwargs)¶
检查作为参数传递的包列表是否已安装。
- 参数:
packages – 要检查的包列表。
- 返回值:
系统中未安装的 packages 参数中的包列表。
- install(*args, **kwargs)¶
将尝试安装作为参数传递的包列表。其行为受
tools.system.package_manager:mode
配置 的值影响。- 参数:
packages – 尝试安装作为参数传递的包列表。
update – 尝试在检查和安装之前更新包管理器数据库。
检查 – 在安装软件包之前检查它们是否已安装。
- 返回值:
执行的包管理器命令的返回代码。
- install_substitutes(*args, **kwargs)¶
将尝试使用作为可变数量的参数传递的几个软件包列表调用 install() 方法。例如,如果软件包的名称在一个发行版或发行版版本到另一个发行版或发行版版本之间不同,则此方法很有用。例如,
libxcb
对于Apt
在 Ubuntu >= 15.0 中命名为libxcb-util-dev
,而在其他版本中命名为libxcb-util0-dev
。您可以调用# will install the first list of packages that succeeds in the installation Apt.install_substitutes(["libxcb-util-dev"], ["libxcb-util0-dev"])
- 参数:
packages_alternatives – 尝试安装作为参数传递的软件包列表。
update – 尝试在检查和安装之前更新包管理器数据库。
检查 – 在安装软件包之前检查它们是否已安装。
- 返回值:
执行的包管理器命令的返回代码。
Alpine Linux 不支持同一存储库中的多个体系结构,因此没有从 Conan 体系结构到 Alpine 体系结构的映射。
conan.tools.system.package_manager.Apt¶
将调用 apt-get 命令。默认情况下,对于发行版名称为 ubuntu、debian、raspbian 和 linuxmint 的 Linux 启用。
参考¶
- class Apt(conanfile, arch_names=None)¶
- 参数:
conanfile – 当前配方对象。始终使用
self
。arch_names – 此参数将 Conan 体系结构设置与包管理器工具体系结构名称映射。默认情况下为
None
,这意味着它将使用最常见体系结构的默认映射。例如,如果您使用x86_64
Conan 体系结构设置,它会将此值映射到 Apt 的amd64
并尝试安装<package_name>:amd64
软件包。
- install(packages, update=False, check=True, recommends=False, host_package=True)¶
将尝试安装作为参数传递的包列表。其行为受
tools.system.package_manager:mode
配置 的值影响。- 参数:
packages – 尝试安装作为参数传递的包列表。
update – 尝试在检查和安装之前更新包管理器数据库。
检查 – 在安装软件包之前检查它们是否已安装。
host_package – 为主机机器架构(运行软件的机器)安装软件包,在交叉构建时有效。
recommends – 如果参数
recommends
为False
,它将向 apt-get 命令调用添加'--no-install-recommends'
参数。
- 返回值:
执行的 apt 命令的返回代码。
- check(*args, **kwargs)¶
检查作为参数传递的包列表是否已安装。
- 参数:
packages – 要检查的包列表。
- 返回值:
系统中未安装的 packages 参数中的包列表。
- install_substitutes(*args, **kwargs)¶
将尝试使用作为可变数量的参数传递的几个软件包列表调用 install() 方法。例如,如果软件包的名称在一个发行版或发行版版本到另一个发行版或发行版版本之间不同,则此方法很有用。例如,
libxcb
对于Apt
在 Ubuntu >= 15.0 中命名为libxcb-util-dev
,而在其他版本中命名为libxcb-util0-dev
。您可以调用# will install the first list of packages that succeeds in the installation Apt.install_substitutes(["libxcb-util-dev"], ["libxcb-util0-dev"])
- 参数:
packages_alternatives – 尝试安装作为参数传递的软件包列表。
update – 尝试在检查和安装之前更新包管理器数据库。
检查 – 在安装软件包之前检查它们是否已安装。
- 返回值:
执行的包管理器命令的返回代码。
您可以传递 arch_names
参数以覆盖默认的 Conan 映射,如下所示
...
def system_requirements(self):
apt = Apt(self, arch_names={"<conan_arch_setting>": "apt_arch_setting"})
apt.install(["libgl-dev"])
Conan 用于 APT 软件包体系结构的默认映射为
self._arch_names = {"x86_64": "x86_64",
"x86": "i?86",
"ppc32": "powerpc",
"ppc64le": "ppc64le",
"armv7": "armv7",
"armv7hf": "armv7hl",
"armv8": "aarch64",
"s390x": "s390x"} if arch_names is None else arch_names
conan.tools.system.package_manager.Yum¶
将调用 yum 命令。默认情况下,对于发行版名称为 pidora、scientific、xenserver、amazon、oracle、amzn 和 almalinux 的 Linux 启用。
参考¶
- class Yum(conanfile, arch_names=None)¶
- 参数:
conanfile – 当前配方对象。始终使用
self
。arch_names – 此参数将 Conan 体系结构设置与包管理器工具体系结构名称映射。默认情况下为
None
,这意味着它将使用最常见体系结构的默认映射。例如,如果您使用x86
Conan 体系结构设置,它会将此值映射到 Yum 的i?86
并尝试安装<package_name>.i?86
软件包。
- check(*args, **kwargs)¶
检查作为参数传递的包列表是否已安装。
- 参数:
packages – 要检查的包列表。
- 返回值:
系统中未安装的 packages 参数中的包列表。
- install(*args, **kwargs)¶
将尝试安装作为参数传递的包列表。其行为受
tools.system.package_manager:mode
配置 的值影响。- 参数:
packages – 尝试安装作为参数传递的包列表。
update – 尝试在检查和安装之前更新包管理器数据库。
检查 – 在安装软件包之前检查它们是否已安装。
- 返回值:
执行的包管理器命令的返回代码。
- install_substitutes(*args, **kwargs)¶
将尝试使用作为可变数量的参数传递的几个软件包列表调用 install() 方法。例如,如果软件包的名称在一个发行版或发行版版本到另一个发行版或发行版版本之间不同,则此方法很有用。例如,
libxcb
对于Apt
在 Ubuntu >= 15.0 中命名为libxcb-util-dev
,而在其他版本中命名为libxcb-util0-dev
。您可以调用# will install the first list of packages that succeeds in the installation Apt.install_substitutes(["libxcb-util-dev"], ["libxcb-util0-dev"])
- 参数:
packages_alternatives – 尝试安装作为参数传递的软件包列表。
update – 尝试在检查和安装之前更新包管理器数据库。
检查 – 在安装软件包之前检查它们是否已安装。
- 返回值:
执行的包管理器命令的返回代码。
Conan 用于 Yum 软件包体系结构的默认映射为
self._arch_names = {"x86_64": "x86_64",
"x86": "i?86",
"ppc32": "powerpc",
"ppc64le": "ppc64le",
"armv7": "armv7",
"armv7hf": "armv7hl",
"armv8": "aarch64",
"s390x": "s390x"} if arch_names is None else arch_names
conan.tools.system.package_manager.Dnf¶
将调用 dnf 命令。默认情况下,对于发行版名称为 fedora、rhel、centos 和 mageia 的 Linux 启用。此工具与 Yum 工具具有完全相同的默认值、构造函数和方法。
conan.tools.system.package_manager.PacMan¶
将调用 pacman 命令。默认情况下,对于发行版名称为 arch、manjaro 的 Linux 以及使用 msys2 的 Windows 启用。
参考¶
- class PacMan(conanfile, arch_names=None)¶
- 参数:
conanfile – 当前配方对象。始终使用
self
。arch_names – 此参数将 Conan 体系结构设置与包管理器工具体系结构名称映射。默认情况下为
None
,这意味着它将使用最常见体系结构的默认映射。如果您使用x86
Conan 体系结构设置,它会将此值映射到 PacMan 的lib32
并尝试安装<package_name>-lib32
软件包。
- check(*args, **kwargs)¶
检查作为参数传递的包列表是否已安装。
- 参数:
packages – 要检查的包列表。
- 返回值:
系统中未安装的 packages 参数中的包列表。
- install(*args, **kwargs)¶
将尝试安装作为参数传递的包列表。其行为受
tools.system.package_manager:mode
配置 的值影响。- 参数:
packages – 尝试安装作为参数传递的包列表。
update – 尝试在检查和安装之前更新包管理器数据库。
检查 – 在安装软件包之前检查它们是否已安装。
- 返回值:
执行的包管理器命令的返回代码。
- install_substitutes(*args, **kwargs)¶
将尝试使用作为可变数量的参数传递的几个软件包列表调用 install() 方法。例如,如果软件包的名称在一个发行版或发行版版本到另一个发行版或发行版版本之间不同,则此方法很有用。例如,
libxcb
对于Apt
在 Ubuntu >= 15.0 中命名为libxcb-util-dev
,而在其他版本中命名为libxcb-util0-dev
。您可以调用# will install the first list of packages that succeeds in the installation Apt.install_substitutes(["libxcb-util-dev"], ["libxcb-util0-dev"])
- 参数:
packages_alternatives – 尝试安装作为参数传递的软件包列表。
update – 尝试在检查和安装之前更新包管理器数据库。
检查 – 在安装软件包之前检查它们是否已安装。
- 返回值:
执行的包管理器命令的返回代码。
Conan 用于PacMan 包架构的默认映射是
self._arch_names = {"x86": "lib32"} if arch_names is None else arch_names
conan.tools.system.package_manager.Zypper¶
将调用zypper 命令。默认情况下,对于发行版名称为opensuse、sles 的Linux 系统启用。
参考¶
- class Zypper(conanfile)¶
- 参数:
conanfile – 当前配方对象。始终使用
self
。
- check(*args, **kwargs)¶
检查作为参数传递的包列表是否已安装。
- 参数:
packages – 要检查的包列表。
- 返回值:
系统中未安装的 packages 参数中的包列表。
- install(*args, **kwargs)¶
将尝试安装作为参数传递的包列表。其行为受
tools.system.package_manager:mode
配置 的值影响。- 参数:
packages – 尝试安装作为参数传递的包列表。
update – 尝试在检查和安装之前更新包管理器数据库。
检查 – 在安装软件包之前检查它们是否已安装。
- 返回值:
执行的包管理器命令的返回代码。
- install_substitutes(*args, **kwargs)¶
将尝试使用作为可变数量的参数传递的几个软件包列表调用 install() 方法。例如,如果软件包的名称在一个发行版或发行版版本到另一个发行版或发行版版本之间不同,则此方法很有用。例如,
libxcb
对于Apt
在 Ubuntu >= 15.0 中命名为libxcb-util-dev
,而在其他版本中命名为libxcb-util0-dev
。您可以调用# will install the first list of packages that succeeds in the installation Apt.install_substitutes(["libxcb-util-dev"], ["libxcb-util0-dev"])
- 参数:
packages_alternatives – 尝试安装作为参数传递的软件包列表。
update – 尝试在检查和安装之前更新包管理器数据库。
检查 – 在安装软件包之前检查它们是否已安装。
- 返回值:
执行的包管理器命令的返回代码。
conan.tools.system.package_manager.Brew¶
将调用brew 命令。默认情况下,对于macOS 系统启用。
参考¶
- class Brew(conanfile)¶
- 参数:
conanfile – 当前配方对象。始终使用
self
。
- check(*args, **kwargs)¶
检查作为参数传递的包列表是否已安装。
- 参数:
packages – 要检查的包列表。
- 返回值:
系统中未安装的 packages 参数中的包列表。
- install(*args, **kwargs)¶
将尝试安装作为参数传递的包列表。其行为受
tools.system.package_manager:mode
配置 的值影响。- 参数:
packages – 尝试安装作为参数传递的包列表。
update – 尝试在检查和安装之前更新包管理器数据库。
检查 – 在安装软件包之前检查它们是否已安装。
- 返回值:
执行的包管理器命令的返回代码。
- install_substitutes(*args, **kwargs)¶
将尝试使用作为可变数量的参数传递的几个软件包列表调用 install() 方法。例如,如果软件包的名称在一个发行版或发行版版本到另一个发行版或发行版版本之间不同,则此方法很有用。例如,
libxcb
对于Apt
在 Ubuntu >= 15.0 中命名为libxcb-util-dev
,而在其他版本中命名为libxcb-util0-dev
。您可以调用# will install the first list of packages that succeeds in the installation Apt.install_substitutes(["libxcb-util-dev"], ["libxcb-util0-dev"])
- 参数:
packages_alternatives – 尝试安装作为参数传递的软件包列表。
update – 尝试在检查和安装之前更新包管理器数据库。
检查 – 在安装软件包之前检查它们是否已安装。
- 返回值:
执行的包管理器命令的返回代码。
conan.tools.system.package_manager.Pkg¶
将调用pkg 命令。默认情况下,对于发行版名称为freebsd 的Linux 系统启用。
参考¶
- class Pkg(conanfile)¶
- 参数:
conanfile – 当前配方对象。始终使用
self
。
- check(*args, **kwargs)¶
检查作为参数传递的包列表是否已安装。
- 参数:
packages – 要检查的包列表。
- 返回值:
系统中未安装的 packages 参数中的包列表。
- install(*args, **kwargs)¶
将尝试安装作为参数传递的包列表。其行为受
tools.system.package_manager:mode
配置 的值影响。- 参数:
packages – 尝试安装作为参数传递的包列表。
update – 尝试在检查和安装之前更新包管理器数据库。
检查 – 在安装软件包之前检查它们是否已安装。
- 返回值:
执行的包管理器命令的返回代码。
- install_substitutes(*args, **kwargs)¶
将尝试使用作为可变数量的参数传递的几个软件包列表调用 install() 方法。例如,如果软件包的名称在一个发行版或发行版版本到另一个发行版或发行版版本之间不同,则此方法很有用。例如,
libxcb
对于Apt
在 Ubuntu >= 15.0 中命名为libxcb-util-dev
,而在其他版本中命名为libxcb-util0-dev
。您可以调用# will install the first list of packages that succeeds in the installation Apt.install_substitutes(["libxcb-util-dev"], ["libxcb-util0-dev"])
- 参数:
packages_alternatives – 尝试安装作为参数传递的软件包列表。
update – 尝试在检查和安装之前更新包管理器数据库。
检查 – 在安装软件包之前检查它们是否已安装。
- 返回值:
执行的包管理器命令的返回代码。
conan.tools.system.package_manager.PkgUtil¶
将调用pkgutil 命令。默认情况下,对于Solaris 系统启用。
参考¶
- class PkgUtil(conanfile)¶
- 参数:
conanfile – 当前配方对象。始终使用
self
。
- check(*args, **kwargs)¶
检查作为参数传递的包列表是否已安装。
- 参数:
packages – 要检查的包列表。
- 返回值:
系统中未安装的 packages 参数中的包列表。
- install(*args, **kwargs)¶
将尝试安装作为参数传递的包列表。其行为受
tools.system.package_manager:mode
配置 的值影响。- 参数:
packages – 尝试安装作为参数传递的包列表。
update – 尝试在检查和安装之前更新包管理器数据库。
检查 – 在安装软件包之前检查它们是否已安装。
- 返回值:
执行的包管理器命令的返回代码。
- install_substitutes(*args, **kwargs)¶
将尝试使用作为可变数量的参数传递的几个软件包列表调用 install() 方法。例如,如果软件包的名称在一个发行版或发行版版本到另一个发行版或发行版版本之间不同,则此方法很有用。例如,
libxcb
对于Apt
在 Ubuntu >= 15.0 中命名为libxcb-util-dev
,而在其他版本中命名为libxcb-util0-dev
。您可以调用# will install the first list of packages that succeeds in the installation Apt.install_substitutes(["libxcb-util-dev"], ["libxcb-util0-dev"])
- 参数:
packages_alternatives – 尝试安装作为参数传递的软件包列表。
update – 尝试在检查和安装之前更新包管理器数据库。
检查 – 在安装软件包之前检查它们是否已安装。
- 返回值:
执行的包管理器命令的返回代码。
conan.tools.system.package_manager.Chocolatey¶
将调用choco 命令。默认情况下,对于Windows 系统启用。
参考¶
- class Chocolatey(conanfile)¶
- 参数:
conanfile – 当前配方对象。始终使用
self
。
- check(*args, **kwargs)¶
检查作为参数传递的包列表是否已安装。
- 参数:
packages – 要检查的包列表。
- 返回值:
系统中未安装的 packages 参数中的包列表。
- install(*args, **kwargs)¶
将尝试安装作为参数传递的包列表。其行为受
tools.system.package_manager:mode
配置 的值影响。- 参数:
packages – 尝试安装作为参数传递的包列表。
update – 尝试在检查和安装之前更新包管理器数据库。
检查 – 在安装软件包之前检查它们是否已安装。
- 返回值:
执行的包管理器命令的返回代码。
- install_substitutes(*args, **kwargs)¶
将尝试使用作为可变数量的参数传递的几个软件包列表调用 install() 方法。例如,如果软件包的名称在一个发行版或发行版版本到另一个发行版或发行版版本之间不同,则此方法很有用。例如,
libxcb
对于Apt
在 Ubuntu >= 15.0 中命名为libxcb-util-dev
,而在其他版本中命名为libxcb-util0-dev
。您可以调用# will install the first list of packages that succeeds in the installation Apt.install_substitutes(["libxcb-util-dev"], ["libxcb-util0-dev"])
- 参数:
packages_alternatives – 尝试安装作为参数传递的软件包列表。
update – 尝试在检查和安装之前更新包管理器数据库。
检查 – 在安装软件包之前检查它们是否已安装。
- 返回值:
执行的包管理器命令的返回代码。