@alvenysh

Как указать явно куда устанавливать pip пакеты?

Сделал две абсолютно одинаковые машины на redos 7.3.4 sert.

На одной устанавливал пакеты вручную подключившись под пользователем user (у которого есть sudo права). При этом при запуске команды sudo pip3 install launchpadlib пакет launchpadlib устанавливается в /usr/lib/python3.8/site-packages

На второй машине запускаю установку того же пакета с помощью Ansible:
- name: установка launchpadlib
    command: pip3 install launchpadlib --user
    become_user: user

При выполнении этой таски пакет устанавливается в ./.local/lib/python3.8/site-packages

Так же пытался установить пакет через модуль pip
- name: установка пакетов для patroni
   ansible.builtin.pip:
        extra_args: --user
        name:    
          - launchpadlib

При этом варианте всё устанавливается вообще в /root/.local/lib/python3.8/site-packages (если добавить become_user: user то опять же установится в домашней директории).

Проблема в том, что мне надо чтобы всё устанавливалось, как в первом варианте, то есть, как вручную, потому что иначе не стартует служба patroni, говорит, что нет необходимого модуля (хотя он есть, только ищет его система в /usr/lib/python3.8/site-packages).

Как это можно сделать?
  • Вопрос задан
  • 137 просмотров
Решения вопроса 1
@alvenysh Автор вопроса
итак, максимум что я придумал (и это работает) - принудительно указать путь куда ставить пакеты
- name: Установка пакетов в /usr/local/lib/python3.8/site-packages
pip:
name:
- launchpadlib
- click
- python-etcd
- urllib3
- prettytable
state: present
extra_args: "--target /usr/local/lib/python3.8/site-packages"

become: yes по умолчанию стоит на весь плейбук, если не указывать больше ничего, то, как я и говорил, пакеты уходят в /root/.local/lib/python3.8/site-packages (даже без extra_args: --user)

PS:
Это какой-то идиотизм, но сейчас всё работает.
Что помогло?
Обновление образа. Тупо uppdate/upgrade.
без этого при обновлении пипа root переставал понимать где находится pip + если вручную указывать откуда запускать (в моём случае /usr/local/bin/pip3), то пип отрабатывал, но патрони не видел установленные модули (как будто прав не хватало, чтобы их вызвать).
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
chupasaurus
@chupasaurus
Сею рефлекторное, злое, временное
А зачем вам --user и become_user, если вы вручную их не делали?
- name: python libs installation
  ansible.builtin.pip:
    name: launchpadlib
  become: yes
Ответ написан
Комментировать
@Maxosw777
в скрипте путь другой укажи.
Ответ написан
Комментировать
@MaxKozlov
если вы в оригинальной команде писали
sudo pip
это по сути установка из под рута
поэтому, просто
become: true
или (если есть необходимость)
become: true
become_user: root

p.s. Если посмотреть старые доки - там было даже sudo: yes, а не become
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы