Я использую 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, который >использует< Ansible. Если у вас установлено несколько версий Python или несколько сред Python, возможно, Ansible не использует среду Python, в которую вы установили «python3-rpm». (Похоже, что Ansible на самом деле использует виртуальную среду /data/venv/.)
Я думаю, что pip3 может не использовать тот же номер версии, что и интерпретатор python3, который используется ansible. Не могли бы вы запустить команду python3 -m pip freeze | grep rpm
, чтобы проверить, установлен ли в интерпретаторе python3 rpm? Если нет, вы можете использовать команду python3 -m pip install rpm
для его установки.
Где вы его установили? На управляющем узле и/или на всех удаленных узлах?
Спасибо за вашу помощь. Я отредактировал вопрос с подробностями.
После тестирования я обнаружил, что это связано с тем, что библиотека "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
В сообщении об ошибке говорится: «Прочитайте документацию модуля и установите его в соответствующее место. Если необходимая библиотека установлена, но Ansible использует неправильный интерпретатор Python, обратитесь к документации по ansible_python_interpreter». Ты делал эти вещи?