У меня есть доступная задача
- 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
переменная.
вы можете убедиться, что ваш пип обновлен? Из virtualenv вы запускаете:
easy_install --upgrade pip
. У меня была такая же ошибка, но я не использую virtualenv. Запуск обновления easy_install устранил мою проблему.
Похоже, что Вы попадаете в открытую проблему в Ansible.
Проверьте, решает ли настройка абсолютного пути для параметра virtualenv
Вашу проблему. (Как предложено в Допустимом устройстве в сообщении о проблеме.)
Также в Ansible documentation нет ничего, что указывало бы на возможность установки параметров для virtualenv_command
в параметре Допустимое virtualenv_command
. Поэтому попробуйте установить его в /root/.pyenv/bin/pyenv
.
Я нашел обходной путь для установки пакетов с помощью 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
, чтобы делать все, что вам нужно.