Ansible 创建虚拟环境
如何使用Ansible为特定的Python版本创建一个虚拟环境?Ansible的标准库里有没有相关的命令?
我想要的类似于:
- virtualenv: dest=venv python_version:/usr/bin/python3
4 个回答
2
在Centos-7系统上:
使用的Ansible版本:2.9(这个脚本应该适用于2及以上版本的Ansible)
完整的Ansible脚本,用于创建Python3.6的虚拟环境
- 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
11
在 ansible 2.0 中,你可以为你的虚拟环境指定一个 Python 版本,方法是使用 virtualenv_python
。
比如说:
- name: Initiate virtualenv
pip: virtualenv="{{ virtualenv_dir }}"
virtualenv_python=python3.4
requirements={{ app_dir }}/requirements.txt
19
你可以使用pip
模块和一个特定的virtualenv
工具来实现这个功能:
- pip: virtualenv=/path/to/venv virtualenv_command=/path/to/virtualenv3 ...
97
有时候我在指定 virtualenv_command
的时候会遇到一些奇怪的问题,比如我明明指定要用 virtualenv-3.4
来创建虚拟环境,却得到一个 Python 2.7 的可执行文件。
如果你也遇到这个问题,你可以通过 command
模块手动创建虚拟环境:
- 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
这个路径下没有虚拟环境时才会执行。)
然后你可以像往常一样使用 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
(使用这个,你就不需要先手动创建虚拟环境了)