Python 3 Support
Ansible 2.5 and above have support for Python 3. Previous to 2.5, the Python 3 support wasconsidered a tech preview. This topic discusses how to setup your controller and managed machinesto use Python 3.
Note
Ansible supports Python version 3.5 and above only.
On the controller side
The easiest way to run /usr/bin/ansible under Python 3 is to install it with the Python3version of pip. This will make the default /usr/bin/ansible run with Python3:
- $ pip3 install ansible
- $ ansible --version | grep "python version"
- python version = 3.6.2 (default, Sep 22 2017, 08:28:09) [GCC 7.2.1 20170915 (Red Hat 7.2.1-2)]
If you are running Ansible Running From Source and want to use Python 3 with your source checkout, run yourcommand via python3
. For example:
- $ source ./hacking/env-setup
- $ python3 $(which ansible) localhost -m ping
- $ python3 $(which ansible-playbook) sample-playbook.yml
Note
Individual Linux distribution packages may be packaged for Python2 or Python3. When running fromdistro packages you’ll only be able to use Ansible with the Python version for which it wasinstalled. Sometimes distros will provide a means of installing for several Python versions(via a separate package or via some commands that are run after install). You’ll need to checkwith your distro to see if that applies in your case.
Using Python 3 on the managed machines with commands and playbooks
- Set the
ansible_python_interpreter
configuration option to /usr/bin/python3. Theansible_python_interpreter
configuration option is usually set as an inventoryvariable associated with a host or group of hosts:
- # 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
See also
Working with Inventory for more information.
- Run your command or playbook:
- $ ansible localhost-py3 -m ping
- $ ansible-playbook sample-playbook.yml
Note that you can also use the -e command line option to manuallyset the python interpreter when you run a command. This can be useful if you want to test whethera specific module or playbook has any bugs under Python 3. For example:
- $ ansible localhost -m ping -e 'ansible_python_interpreter=/usr/bin/python3'
- $ ansible-playbook sample-playbook.yml -e 'ansible_python_interpreter=/usr/bin/python3'
What to do if an incompatibility is found
We have spent several releases squashing bugs and adding new tests so that Ansible’s core featureset runs under both Python 2 and Python 3. However, bugs may still exist in edge cases and many ofthe modules shipped with Ansible are maintained by the community and not all of those may be portedyet.
If you find a bug running under Python 3 you can submit a bug report on Ansible’s GitHub project. Be sure to mention Python3 in the bug report sothat the right people look at it.
If you would like to fix the code and submit a pull request on github, you canrefer to Ansible and Python 3 for information on how we fixcommon Python3 compatibility issues in the Ansible codebase.