Ansible创造了virtualenv

use*_*088 52 python ansible

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

我想要像:

- virtualenv: dest=venv python_version:/usr/bin/python3
Run Code Online (Sandbox Code Playgroud)

toa*_*oza 66

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

如果遇到该问题,可以使用command模块手动创建virtualenv :

- name: Manually create the initial virtualenv
  command: virtualenv /user/home/venvs/myenv -p python3.4 creates="/user/home/venvs/myenv"
Run Code Online (Sandbox Code Playgroud)

(注意:通过指定creates此命令仅在virtualenv不存在的情况下运行/user/home/venvs/myenv).

然后,您可以使用以下pip命令正常安装您的需求:

- name: Install requirements
  pip: 
    requirements=/my_app/requirements.txt 
    virtualenv=/user/home/venvs/myenv
Run Code Online (Sandbox Code Playgroud)

更新

我发现指定virtualenv_python(在Ansible 2.0+中可用)似乎也适用于上述情况.例如:

- name: Install requirements
  pip: 
    requirements: /my_app/requirements.txt
    virtualenv: /user/home/venvs/myenv
    virtualenv_python: python3.4
Run Code Online (Sandbox Code Playgroud)

(有了这个,你不需要先手动创建virtualenv)

  • 如果你在virtualenv中需要Python 3.x并且你的Ansible使用的是Python 2.x,则最后两个`pip`任务不起作用.因为Ansible正在使用Python2,它会生成一个绕过virtualenv的`pip2 install`命令,并将使用任何系统级pip安装 - 因此这些软件包在系统级安装而不是virtualenv.对于使用Python 3的此设置,我必须使用shell命令来创建virtualenv和pip安装. (6认同)
  • 仅供参考,自 Python 3.6.0 以来,“pyvenv”已被弃用。现在是``python3 -m venv``:https://docs.python.org/3/library/venv.html (4认同)
  • 最后一个为我工作(这种方式现在在Ansible 2的文档中提到).只有一件事:我需要在安装`kallithea`时指定`chdir`,否则当前目录(在`requirements.txt`中引用)是错误的.有`chdir =/my_app`可能在这里工作 (2认同)
  • 什么工作是`shell:source"{{app_home}} /.virtualenvs/myenv/bin/activate"&& pip3 install -r"{{app_home}}/tests/requirements.txt"`. (2认同)

Sch*_*uki 15

您可以使用pip模块和特定virtualenv二进制文件来执行此操作:

- pip: virtualenv=/path/to/venv virtualenv_command=/path/to/virtualenv3 ...
Run Code Online (Sandbox Code Playgroud)

  • @ user204088,为什么你需要一个空的virtualenv?Ansible pip模块很好地为你创建了一个,如果它不存在,或者使用它,如果它... (4认同)
  • 这样做是要求提供名称或要求.我是否需要设置这些选项中的任何一个?或者有没有办法创建一个空的virtualenv (2认同)

Tri*_*tan 8

使用ansible 2.0,您可以为virtualenv指定一个python版本 virtualenv_python

例如:

- name: Initiate virtualenv
  pip: virtualenv="{{ virtualenv_dir }}" 
       virtualenv_python=python3.4
       requirements={{ app_dir }}/requirements.txt
Run Code Online (Sandbox Code Playgroud)