Ansible pyenv virtualenv выдает ошибку для pip

У меня есть доступная задача

- name: Install setuptools in virtual environment
  pip:
      name: setuptools-git
      virtualenv: "myenv"
      virtualenv_command: "/root/.pyenv/bin/pyenv virtualenv 2.7.13"

Но она выдает ошибку

fatal: [localhost]: FAILED! => {
    "changed": false,
    "invocation": {
        "module_args": {
            "chdir": null,
            "editable": false,
            "executable": null,
            "extra_args": "",
            "name": [
                "setuptools-git"
            ],
            "requirements": null,
            "state": "present",
            "umask": null,
            "use_mirrors": true,
            "version": null,
            "virtualenv": "myenv",
            "virtualenv_command": "/root/.pyenv/bin/pyenv virtualenv 2.7.13",
            "virtualenv_python": null,
            "virtualenv_site_packages": false
        }
    },
    "msg": "Unable to find pip in the virtualenv, myenv, under any of these names: pip2, pip. Make sure pip is present in the virtualenv."
}

Когда я проверяю файл pip в virtualenv, он уже там

# ls /root/.pyenv/versions/myenv/bin/pip
/root/.pyenv/versions/myenv/bin/pip

Я не могу использовать исполняемый файл с virtualenv переменная.

0
задан 15 January 2018 в 23:53
3 ответа

вы можете убедиться, что ваш пип обновлен? Из virtualenv вы запускаете: easy_install --upgrade pip . У меня была такая же ошибка, но я не использую virtualenv. Запуск обновления easy_install устранил мою проблему.

1
ответ дан 4 December 2019 в 13:28

Похоже, что Вы попадаете в открытую проблему в Ansible.

Проверьте, решает ли настройка абсолютного пути для параметра virtualenv Вашу проблему. (Как предложено в Допустимом устройстве в сообщении о проблеме.)

Также в Ansible documentation нет ничего, что указывало бы на возможность установки параметров для virtualenv_command в параметре Допустимое virtualenv_command. Поэтому попробуйте установить его в /root/.pyenv/bin/pyenv.

.
1
ответ дан 4 December 2019 в 13:28

Я нашел обходной путь для установки пакетов с помощью pip в virtualenv, управляемый pyenv. Он избегает использования модуля pip и вместо этого просто выполняет некоторые команды оболочки. Я предоставляю некоторые переменные, которые я использовал, файл .pyenvrc , который я создал, и задачу ansible, которая творит магию оболочки.

Переменные :

# Installation paths
pyenv_root: "{{ ansible_env.HOME }}/.pyenv"
pyenv_rc: "{{ pyenv_root }}/.pyenvrc"
# Whatever your virtualenv is named
pyenv_venv_name: "foo_virtualenv"
project_dir: /path/to/your/project

Задачи :

- name: Pip - install requirements using shell
  shell: |
    # cd to project directory
    cd {{ project_dir }}
    # Check to see if we are already inside a virtualenv
    if ! [[ ${VIRTUAL_ENV} ]]; then
        # Load pyenv into the shell
        source {{ pyenv_rc }}
        # Activate the virtualenv
        pyenv activate {{ pyenv_venv_name }}
    fi
    # Install python requirements 
    pip install -r requirements.txt
  args:
    executable: /bin/bash
  register: pip_script_result

Содержимое .pyenvrc :

# Add pyenv into path if installed into default location
export PYENV_ROOT="{{ pyenv_root }}"
export PATH="${PYENV_ROOT}/bin:${PATH}"

# Initialise pyenv and pyenv-virtualenv if installed
if [[ -d $HOME/.pyenv ]];then
    eval "$(pyenv init -)"
    if [ -d "${PYENV_ROOT}/plugins/pyenv-virtualenv" ]; then
        eval "$(pyenv virtualenv-init -)"
    fi
fi

# Disable prompt changing
export PYENV_VIRTUALENV_DISABLE_PROMPT=1

В приведенном выше примере я установил содержимое requirements.txt с использованием pip в моем pyenv, управляемом virtualenv. Вы должны иметь возможность адаптировать строку pip install , чтобы делать все, что вам нужно.

0
ответ дан 4 December 2019 в 13:28

Теги

Похожие вопросы