【发布时间】:2014-10-16 10:30:06
【问题描述】:
如何使用 ansible 为特定的 python 版本创建 virtualenv。 ansible标准库中有命令吗?
我想要类似的东西:
- virtualenv: dest=venv python_version:/usr/bin/python3
【问题讨论】:
如何使用 ansible 为特定的 python 版本创建 virtualenv。 ansible标准库中有命令吗?
我想要类似的东西:
- virtualenv: dest=venv python_version:/usr/bin/python3
【问题讨论】:
我有时会在指定 virtualenv_command 时遇到一些不稳定的行为(例如:在我的 virtualenv 中获取 python 2.7 可执行文件,即使我指定使用 virtualenv-3.4 运行命令。
如果您遇到该问题,您可以使用 command 模块手动创建 virtualenv:
- name: Manually create the initial virtualenv
command:
cmd: virtualenv /user/home/venvs/myenv -p python3.4
creates: "/user/home/venvs/myenv"
(注意:通过指定creates,此命令将仅在/user/home/venvs/myenv不存在virtualenv的情况下运行)。
然后您可以使用pip 命令正常安装您的要求:
- name: Install requirements
pip:
requirements=/my_app/requirements.txt
virtualenv=/user/home/venvs/myenv
更新
我发现指定virtualenv_python(在 Ansible 2.0+ 中可用)似乎也适用于上述情况。例如:
- name: Install requirements
pip:
requirements: /my_app/requirements.txt
virtualenv: /user/home/venvs/myenv
virtualenv_python: python3.4
(有了这个你应该不需要先手动创建 virtualenv)
【讨论】:
kallithea 时指定chdir,否则当前目录(在requirements.txt 中引用)是错误的。拥有chdir=/my_app 可能在这里工作
pip 任务不起作用。因为 Ansible 使用的是 Python2,它会生成一个绕过 virtualenv 的 pip2 install 命令,并将使用任何系统级 pip 安装来代替 - 因此这些包安装在系统级而不是 virtualenv 中。对于 Python 3 的这个设置,我必须使用 shell 命令来创建 virtualenv 和 pip 安装。
shell: source "{{ app_home }}/.virtualenvs/myenv/bin/activate" && pip3 install -r "{{ app_home }}/tests/requirements.txt"。
virtualenv shell 命令。那里叫pyvenv。
pyvenv 自 Python 3.6.0 起已被弃用。现在是python3 -m venv:docs.python.org/3/library/venv.html
您可以使用 pip 模块和特定的 virtualenv 二进制文件:
- pip: virtualenv=/path/to/venv virtualenv_command=/path/to/virtualenv3 ...
【讨论】:
使用 ansible 2.0,您可以使用 virtualenv_python 为您的 virtualenv 指定 python 版本
例如:
- name: Initiate virtualenv
pip: virtualenv="{{ virtualenv_dir }}"
virtualenv_python=python3.4
requirements={{ app_dir }}/requirements.txt
【讨论】:
virtualenv_command 例如。 virtualenv_command: "python3.4 /path/to/virtualenv"
ansible_python_interpreter 指定 python 解释器版本
在 Centos-7 上:
Ansible 版本:2.9(此脚本应该适用于 ansible 版本 2 +)
创建 Python3.6 虚拟环境的完整 ansible 脚本
- name: Enable EPEL Repository on CentOS 7
yum:
name: epel-release
state: latest
- name: check if virtualenv library already installed or not
stat:
path: /usr/bin/virtualenv
register: pip_virtualenv_installed
- name: Download Pip-Installer
get_url:
url: https://bootstrap.pypa.io/pip/2.7/get-pip.py
dest: /tmp/get-pip.py
when: pip_virtualenv_installed.stat.exists == False
- name: Install pip
shell: /usr/bin/python /tmp/get-pip.py
when: pip_virtualenv_installed.stat.exists == False
- name: Install virtualenv module
pip:
name: virtualenv
when: pip_virtualenv_installed.stat.exists == False
- name: Install Python 3.6
yum:
name:
- python36
- python36-devel
- python36-libs
- python3-setuptools
- gcc
- gcc-c++
state: present
- name: Create Python3-virtual environment folder
file:
name: /opt/python3-virtualenv
state: directory
- name: Initiate virtualenv
pip:
virtualenv: /opt/python3-virtualenv
virtualenv_python: python3.6
requirements: /opt/python3-virtualenv/requirements.txt
【讨论】: