AlmaLinux and “python3-dnf”

Hello All,

I’m facing an issue with Ansible and Almalinux target host.

My Ansible is hosted on Ubuntu, I can deploy on Debian and Suze without any pb.

I added a new OS on my configuration, Almalinux 8

When I tried to launch my script the following error appears :

FAILED! => {“changed”: false, “msg”: “Could not import the dnf python module using /usr/bin/python3.11 (3.11.13 (main, Jul 1 2025, 10:23:30) [GCC 8.5.0 20210514 (Red Hat 8.5.0-26)]). Please install python3-dnf package or ensure you have specified the correct ansible_python_interpreter. (attempted [‘/usr/libexec/platform-python’, ‘/usr/bin/python3’, ‘/usr/bin/python’])”, “results”: }

Maybe I didn’t check properly but I don’t found any solution, I tried to set ansible_python_interpreter: /usr/bin/python3 same way

I think there are a trick to manage installation/configuration on ansible target ?

Thank you for your support,

Eric.

In order to run the dnf module you need to use the system Python for which the Python dnf bindings (python3-dnf) are available. I believe that for AlmaLinux 8 the system Python version is 3.6 which also means that you need to run the version of ansible-core that supports running Python 3.6 on target machines, the last such version is ansible-core 2.16, see Releases and maintenance — Ansible Community Documentation.

2 Likes

First thank you for your reply,

My ansible-core is 2.18.7 but more invest reveal that the OS were update form CentOS7 to Almalinux8, and the issue could be related to “alternatives” configuration. I’m not confident with the “alternatives” configuration

If I launch my script on a fresh installed workstation on Alamlinux8 the installation pass

That’s sound really strange for me, the OS upgrade could affect the system ?

Martin is correct, you cannot use ansible-core>=2.17 with the yum/dnf modules on EL8 and older OS systems (RHEL/CentOS/Alma/Rocky, etc). The OS upgrade and alternatives configuration have nothing to do with it, and in fact shouldn’t have worked before the CentOS7 → AlmaLinux8 upgrade either.

@sivel has covered this topic extensively. He has a short but detailed explanation here: Issue with Ansible on Rocky Linux 8.10 (Python 3.12) – "future feature annotations is not defined" - #2 by sivel and a longer and more thorough explanation here: Python 3.7+ Impact on EL8 (future for EL9) - #13 by sivel

Hello, yes you’re true ! But I cannot downgrade my Ansible. I found an alternative I’m using :

  • name: LOGROTATE, logrotate installation
    ansible.builtin.command: dnf install -y logrotate
    become: True

instead of

  • name: Logrotate, logrotate installation
    dnf:
    name: logrotate

I hope I’m on a good way, thank to all people who reply to me !

Yep, you can use command or shell instead if you must use newer Ansible.

However, you can use different versions of Ansible side-by-side using venv. Pipx and Pipenv are both good for this. Or you can use ansible-navigator and use EE’s with specific Ansible versions. If you use AWX/AAP, you can also specify the EE’s to use there as well.

Just want to make sure you know that you have options.

1 Like

I didn’t know that I also have this option, I’ll learn on this topic too.
Thank you for your help !