Python Ansible pyenv virtualenv为pip提供错误?
我有一项艰巨的任务Python Ansible pyenv virtualenv为pip提供错误?,python,pip,ansible,pyenv,Python,Pip,Ansible,Pyenv,我有一项艰巨的任务 - 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": f
- 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."
}
当我在virtualenv中检查pip文件时,它已经在那里了
# ls -alh /root/.pyenv/versions/myenv/bin/pip
-rwxr-xr-x 1 root root 243 Jan 16 17:40 /root/.pyenv/versions/myenv/bin/pip
有两个相同名称的VirtualNV
# /root/.pyenv/bin/pyenv virtualenvs
2.7.13/envs/myenv (created from /root/.pyenv/versions/2.7.13)
myenv (created from /root/.pyenv/versions/2.7.13)
我不能将
可执行文件
与virtualenv
变量一起使用。我找到了一个解决方法将带有pip的软件包安装到pyenv管理的virtualenv中。它确实避免使用pip模块,而只是执行一些shell命令。我提供了一些我使用的变量、我创建的.pyenvrc文件和执行shell魔术的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
任务:
# 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的内容:
#如果安装到默认位置,则将pyenv添加到路径中
export PYENV_ROOT=“{{PYENV_ROOT}”
export PATH=“${PYENV_ROOT}/bin:${PATH}”
#初始化pyenv和pyenv virtualenv(如果已安装)
如果[-d$HOME/.pyenv]];然后
求值“$(pyenv init-”
if[-d“${PYENV_ROOT}/plugins/PYENV virtualenv”];然后
评估“$(pyenv virtualenv init-”
fi
fi
#禁用提示更改
导出PYENV\u VIRTUALENV\u禁用\u提示符=1
在上面的示例中,我使用
pip
将requirements.txt的内容安装到pyenv管理的virtualenv中。您应该能够调整pip安装
行以执行任何需要的操作 基本上,对于virtualenv
属性,您必须传递虚拟环境路径。请参见下面的示例
- hosts: 1.2.3.4
user: remoteuser
environment:
PYENV_ROOT: /home/<user home dir>/.pyenv
PYENV_VERSION: myenv
PYENV_SHELL: bash
PYENV_ACTIVATE_SHELL: 1
tasks:
- pip:
name: setuptools-git
virtualenv: "/home/<user home dir>/.pyenv/versions/myenv"
virtualenv_command: /home/<user home dir>/.pyenv/bin/pyenv virtualenv 3.4.0 myenv
-主机:1.2.3.4
用户:远程用户
环境:
PYENV_ROOT:/home/.PYENV
PYENV_版本:myenv
PYENV_SHELL:bash
PYENV_激活_外壳:1
任务:
-pip:
名称:setuptools git
virtualenv:“/home/.pyenv/versions/myenv”
virtualenv_命令:/home/.pyenv/bin/pyenv virtualenv 3.4.0 myenv
我希望,这将解决您的问题。我们假设
/root/.pyenv/versions/myenv/bin/pip
与2.7.13
?@techraf我更新了我的问题,希望您能从中得到答案