Ansible не может найти библиотеку Python — python3-rpm — которая уже установлена

Я использую 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

В чем проблема?

============================================ Обновлять:

  1. на этом хосте нет другого интерпретатора Python... установлен только этот Python3.9
  2. этот пакет rpm установлен --
(venv) vsa12701896:/data/venv/bin # python3 -m pip freeze | grep rpm
rpm==0.2.0
  1. при дополнительной проверке - я обнаружил, что эти пакеты "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.

В сообщении об ошибке говорится: «Прочитайте документацию модуля и установите его в соответствующее место. Если необходимая библиотека установлена, но Ansible использует неправильный интерпретатор Python, обратитесь к документации по ansible_python_interpreter». Ты делал эти вещи?

Stephen C 24.08.2024 03:57

Обратите внимание, что здесь говорится об интерпретаторе Python, который >использует< Ansible. Если у вас установлено несколько версий Python или несколько сред Python, возможно, Ansible не использует среду Python, в которую вы установили «python3-rpm». (Похоже, что Ansible на самом деле использует виртуальную среду /data/venv/.)

Stephen C 24.08.2024 04:02

Я думаю, что pip3 может не использовать тот же номер версии, что и интерпретатор python3, который используется ansible. Не могли бы вы запустить команду python3 -m pip freeze | grep rpm, чтобы проверить, установлен ли в интерпретаторе python3 rpm? Если нет, вы можете использовать команду python3 -m pip install rpm для его установки.

tax evader 24.08.2024 06:36

Где вы его установили? На управляющем узле и/или на всех удаленных узлах?

U880D 25.08.2024 19:36

Спасибо за вашу помощь. Я отредактировал вопрос с подробностями.

EisenWang 27.08.2024 09:19
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
5
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После тестирования я обнаружил, что это связано с тем, что библиотека "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

Другие вопросы по теме