Ansible创造一个virtualenv

你如何使用ansible为特定的python版本创build一个virtualenv。 在标准库中是否有命令?

我想像这样的东西:

- virtualenv: dest=venv python_version:/usr/bin/python3 

我有时经历过一些指定virtualenv_command不正常的行为(例如:即使我指定用virtualenv-3.4运行命令,在我的virtualenv中获得一个python 2.7可执行文件。

如果遇到这个问题, 可以使用command模块手动创buildvirtualenv:

 - name: Manually create the initial virtualenv command: virtualenv /user/home/venvs/myenv -p python3.4 creates="/user/home/venvs/myenv" 

(注意:通过指定creates这个命令只会在virtualenv不存在于/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 

(有了这个你不需要先手动创buildvirtualenv)

你可以使用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