Как создать виртуальную среду для конкретной версии Python с помощью ansible. Есть ли команда в стандартной библиотеке ansible?
Я хотел бы что-то вроде:
- virtualenv: dest=venv python_version:/usr/bin/python3
Как создать виртуальную среду для конкретной версии Python с помощью ansible. Есть ли команда в стандартной библиотеке ansible?
Я хотел бы что-то вроде:
- virtualenv: dest=venv python_version:/usr/bin/python3
Время от времени я сталкивался с неустойчивым поведением при указании virtualenv_command
(например: получение исполняемого файла python 2.7 в моем virtualenv, хотя я указал запустить команду с virtualenv-3.4
.
Если у вас возникла эта проблема, вы можете создать виртуальную среду вручную с помощью модуля command
:
- name: Manually create the initial virtualenv
command:
cmd: 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)
chdir
при установке kallithea
, иначе текущий каталог (на который ссылается внутри requirements.txt
) неверен. Здесь может подойти chdir=/my_app
- person FibreFoX; 05.04.2016
pip
не работают, если вам нужен Python 3.x внутри virtualenv, а ваш Ansible использует Python 2.x. Поскольку Ansible использует Python2, он генерирует команду pip2 install
, которая обходит virtualenv и вместо этого будет использовать любую установку pip на системном уровне, поэтому пакеты устанавливаются на системном уровне, а не в virtualenv. Для этой настройки с Python 3 мне пришлось использовать команды оболочки для создания установки virtualenv и pip.
- person RichVel; 09.12.2016
shell: source "{{ app_home }}/.virtualenvs/myenv/bin/activate" && pip3 install -r "{{ app_home }}/tests/requirements.txt"
.
- person RichVel; 09.12.2016
virtualenv
с Python3. Там это называется pyvenv
.
- person erikbwork; 09.11.2017
pyvenv
устарел, начиная с Python 3.6.0. Теперь python3 -m venv
: docs.python.org/3/library/venv.html а>
- person Juha Untinen; 16.08.2018
Вы можете сделать это с помощью модуля pip
и определенного двоичного файла virtualenv
:
- pip: virtualenv=/path/to/venv virtualenv_command=/path/to/virtualenv3 ...
С помощью ansible 2.0 вы можете указать версию 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"
- person Stefano; 10.02.2016
ansible_python_interpreter
в файле инвентаря
- person Beatriz Fonseca; 08.05.2021
На Центос-7:
Ansible Version: 2.9 (этот скрипт должен работать для ansible версии 2+)
Полный невозможный скрипт для создания виртуальной среды 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