2014-10-16 81 views
37

如何使用ansible为特定的python版本创建virtualenv。标准库中是否有命令?Ansible创建virtualenv

我想是这样的:

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

回答

14

您可以用pip模块和特定virtualenv二进制做到这一点:

- pip: virtualenv=/path/to/venv virtualenv_command=/path/to/virtualenv3 ... 
+2

这样做是要求提供一个名称或要求。我需要设置这些选项吗?或者有没有办法创建一个空的virtualenv – user204088 2014-10-16 11:33:08

+4

@ user204088,为什么你需要一个空的virtualenv? Ansible pip模块很好地为您创建,如果它不存在,或者使用它,如果它确实... – Stefano 2014-12-18 12:39:00

+1

您可能已经知道了这一点,但它要求提供名称/要求,因为pip需要知道要安装什么。它不能像上面指定的那样仅用于创建虚拟环境。相反,它会在安装指定的软件包的过程中创建虚拟环境。 – William 2016-01-18 23:33:51

43

我曾在多次经历了指定virtualenv_command一些反常行为(例如:即使我指定用virtualenv-3.4运行命令,但在我的virtualenv中获得python 2.7可执行文件。

如果您遇到的问题,您可以手动与command模块创建的virtualenv:

- 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 

(这样,你不应该需要手动创建的virtualenv第一)

+1

最后一个为我工作(这种方式现在在Ansible 2的文档中提到)。只有一件事:我需要在安装'kallithea'时指定'chdir',否则当前目录(在'requirements.txt'中引用)是错误的。让'chdir =/my_app'可能在这里工作 – FibreFoX 2016-04-05 16:31:50

+3

如果你需要在virtualenv中使用Python 3.x,而你的Ansible使用Python 2.x,那么最后两个'pip'任务不起作用。因为Ansible使用的是Python2,所以它会生成一个'pip2 install'命令来绕过virtualenv,并使用任何系统级别的pip安装 - 因此这些软件包在系统级安装而不是virtualenv。对于Python 3的这种设置,我必须使用shell命令来创建virtualenv和pip安装。 – RichVel 2016-12-09 11:42:02

+0

工作是'shell:source“{{app_home}} /。virtualenvs/myenv/bin/activate”&& pip3 install -r“{{app_home}}/tests/requirements.txt”'。 – RichVel 2016-12-09 11:45:53

5

随着ansible 2.0你可以用virtualenv_python

例如指定为您的virtualenv一个Python版本:

- name: Initiate virtualenv 
    pip: virtualenv="{{ virtualenv_dir }}" 
     virtualenv_python=python3.4 
     requirements={{ app_dir }}/requirements.txt 
+1

它已经可以在Ansible 1中使用。*使用'virtualenv_command'例如。 'virtualenv_command:“python3.4/path/to/virtualenv”' – Stefano 2016-02-10 14:19:31