Python 3 支持

Ansible 2.5 及更高版本可与 Python 3 协同工作。在 2.5 之前,使用 Python 3 被视为技术预览。本主题讨论如何设置控制节点和受管机器以使用 Python 3。

请参阅 控制节点要求受管节点要求 以了解支持的特定版本。

在控制节点端

在 Python 3 下运行 /usr/bin/ansible 的最简单方法是使用 Python 3 版本的 pip 安装它。这将使默认的 /usr/bin/ansible 使用 Python 3 运行。

$ pip3 install ansible
$ ansible --version | grep "python version"
  python version = 3.10.5 (main, Jun 9 2022, 00:00:00) [GCC 12.1.1 20220507 (Red Hat 12.1.1-1)] (/usr/bin/python)

如果您正在运行 Ansible 从克隆运行 devel 分支 并希望在源代码检出中使用 Python 3,请通过 python3 运行您的命令。例如

$ source ./hacking/env-setup
$ python3 $(which ansible) localhost -m ping
$ python3 $(which ansible-playbook) sample-playbook.yml

注意

各个 Linux 发行版的软件包可能为 Python 2 或 Python 3 打包。从发行版软件包运行时,您只能将 Ansible 用于安装它的 Python 版本。有时,发行版会提供一种安装多个 Python 版本的方法(通过单独的软件包或通过安装后运行的某些命令)。您需要咨询您的发行版以了解这是否适用于您的情况。

在受管机器上使用 Python 3 执行命令和 Playbook

  • Ansible 将自动检测并在许多自带 Python 3 的平台上使用它。要显式配置 Python 3 解释器,请将 ansible_python_interpreter 清单变量在组或主机级别设置为 Python 3 解释器的位置,例如 /usr/bin/python3。默认解释器路径也可以在 ansible.cfg 中设置。

另请参阅

解释器发现 以了解更多信息。

# Example inventory that makes an alias for localhost that uses Python3
localhost-py3 ansible_host=localhost ansible_connection=local ansible_python_interpreter=/usr/bin/python3

# Example of setting a group of hosts to use Python3
[py3_hosts]
ubuntu16
fedora27

[py3_hosts:vars]
ansible_python_interpreter=/usr/bin/python3

另请参阅

如何构建您的清单 以了解更多信息。

  • 运行您的命令或 Playbook

$ ansible localhost-py3 -m ping
$ ansible-playbook sample-playbook.yml

请注意,您还可以使用 -e 命令行选项在运行命令时手动设置 Python 解释器。如果您想测试特定模块或 Playbook 在 Python 3 下是否存在任何错误,这会很有用。例如

$ ansible localhost -m ping -e 'ansible_python_interpreter=/usr/bin/python3'
$ ansible-playbook sample-playbook.yml -e 'ansible_python_interpreter=/usr/bin/python3'

如果发现不兼容性该怎么办

我们已经花了几个版本来消除错误并添加新的测试,以便 Ansible 的核心功能集可以在 Python 2 和 Python 3 下运行。但是,在边缘情况下可能仍然存在错误,并且 Ansible 附带的许多模块由社区维护,并非所有模块都已移植。

如果您发现某个错误在 Python 3 下运行,您可以在 Ansible 的 GitHub 项目上提交错误报告。请务必在错误报告中提及 Python 3,以便合适的人员查看。

如果您想修复代码并在 GitHub 上提交拉取请求,您可以参考 Ansible 和 Python 3,以了解我们如何在 Ansible 代码库中修复常见的 Python 3 兼容性问题。