Я использую Ansible и тестирую модуль: ansible.builtin.package_facts
- name: Gather the package facts
ansible.builtin.package_facts:
manager: auto
- name: Print the package facts
ansible.builtin.debug:
var: ansible_facts.packages
- name: Check whether a package called foobar is installed
ansible.builtin.debug:
msg: "{{ ansible_facts.packages }}"
Но при выполнении первой задачи это не удастся, и ошибка
TASK [test_role : Gather the package facts] ************************************
[WARNING]: Found "rpm" but Failed to import the required Python library (rpm)
on vsa12701896's Python /data/venv/bin/python3. Please read the module
documentation and install it in the appropriate location. If the required
library is installed, but Ansible is using the wrong Python interpreter, please
consult the documentation on ansible_python_interpreter
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Could not detect a supported package manager from the following list: ['rpm', 'apk', 'portage', 'pkg', 'pacman', 'apt', 'pkg_info'], or the required Python library is not installed. Check warnings for details."}
Я уверен, что установил эту библиотеку python3-rpm и подтверждаю, что версия Python — 3.9:
(venv) vsa12701896:/data/srC# zypper search python3-rpm
Loading repository data...
Reading installed packages...
S | Name | Summary | Type
--+-------------+-----------------------------------------------+--------
i | python3-rpm | Python Bindings for Manipulating RPM Packages | package
Note: For an extended search including not yet activated remote resources
please use 'zypper search-packages'.
(venv) vsa12701896:/data/srC# pip3 list|grep rpm
rpm 0.2.0
(venv) vsa12701896:/data/srC# python --version
Python 3.9.19
В чем проблема?
============================================ Обновлять:
(venv) vsa12701896:/data/venv/bin # python3 -m pip freeze | grep rpm
rpm==0.2.0
при дополнительной проверке - я обнаружил, что эти пакеты "rpm" сами по себе имеют некоторые проблемы -
(venv) vsa12701896:/data/venv/bin # python3 -c "импортировать обороты; распечатать(rpm.version)" Трассировка (последний вызов последний): Файл "/data/venv/lib64/python3.9/site-packages/rpm/init.py", строка 106, в shim_module_initializing NameError: имя «shim_module_initializing» не определено
Во время обработки вышеуказанного исключения произошло другое исключение:
Трассировка (последний вызов последний): Файл "", строка 1, в Файл «/data/venv/lib64/python3.9/site-packages/rpm/init.py», строка 109, в инициализировать() Файл "/data/venv/lib64/python3.9/site-packages/rpm/init.py", строка 98, в инициализации поднять ImportError( Ошибка ImportError: не удалось импортировать системный модуль RPM. Убедитесь, что в вашей системе установлены привязки RPM Python.
🤔 А знаете ли вы, что...
Python позволяет создавать сценарии для автоматизации задач и обработки данных.
После тестирования я обнаружил, что это связано с тем, что библиотека "rpm" несовместима с python3.9, она совместима только с python3.6 или ниже -
Я приготовил два венва... венв36 -- python3.6 венв -- python3.9
(venv) vsa12701896:/data/venv/bin # python3.9 -c "import rpm; print(rpm.__version__)"
Traceback (most recent call last):
File "/data/venv/lib64/python3.9/site-packages/rpm/__init__.py", line 106, in <module>
_shim_module_initializing_
NameError: name '_shim_module_initializing_' is not defined
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/data/venv/lib64/python3.9/site-packages/rpm/__init__.py", line 109, in <module>
initialize()
File "/data/venv/lib64/python3.9/site-packages/rpm/__init__.py", line 98, in initialize
raise ImportError(
ImportError: Failed to import system RPM module. Make sure RPM Python bindings are installed on your system.
(venv) vsa12701896:/data # cd venv36/bin
(venv) vsa12701896:/data/venv36/bin # source activate
(venv) vsa12701896:/data/venv36/bin # python3.6 -c "import rpm; print(rpm.__version__)"
4.14.3