Jak utworzyć virtualenv dla konkretnej wersji python za pomocą ansible. Czy istnieje polecenie w bibliotece standardowej ansibla?Podczas tworzenia virtualenv
chciałbym coś takiego:
- virtualenv: dest=venv python_version:/usr/bin/python3
Jak utworzyć virtualenv dla konkretnej wersji python za pomocą ansible. Czy istnieje polecenie w bibliotece standardowej ansibla?Podczas tworzenia virtualenv
chciałbym coś takiego:
- virtualenv: dest=venv python_version:/usr/bin/python3
Można to zrobić za pomocą modułu pip
i konkretnego virtualenv
binarnym:
- pip: virtualenv=/path/to/venv virtualenv_command=/path/to/virtualenv3 ...
mam czasami wystąpiły pewne błędne zachowanie z określeniem virtualenv_command
(np: pobieranie pliku wykonywalnego Pythona 2.7 w moim virtualenv, mimo że określiłem, aby uruchomić polecenie z virtualenv-3.4
.
Jeśli wystąpi ten problem, może stworzyć virtualenv ręcznie z modułem command
:
- name: Manually create the initial virtualenv
command: virtualenv /user/home/venvs/myenv -p python3.4 creates="/user/home/venvs/myenv"
(uwaga: określając creates
to polecenie będzie działać tylko w przypadku, gdy virtualenv nie istnieje w /user/home/venvs/myenv
).
Następnie można zainstalować swoje wymagania jak normalny z komendy pip
:
- name: Install requirements
pip:
requirements=/my_app/requirements.txt
virtualenv=/user/home/venvs/myenv
Aktualizacja
Odkryłam, że określenie virtualenv_python
(dostępny w ansibl 2.0+) również wydaje się działać w przypadku określonym powyżej. Na przykład:
- name: Install requirements
pip:
requirements: /my_app/requirements.txt
virtualenv: /user/home/venvs/myenv
virtualenv_python: python3.4
(z tym nie ma potrzeby, aby ręcznie utworzyć najpierw virtualenv)
Ostatni pracował dla mnie (ten sposób jest już wspomniany w dokumentach Ansible 2). Tylko jedno: podczas instalacji 'kallithea' musiałem podać' chdir', w przeciwnym razie katalog bieżący (który jest wymieniony wewnątrz 'requirements.txt') jest niepoprawny. Mając 'chdir =/my_app' może działać tutaj – FibreFoX
Ostatnie dwa zadania' pip' nie działają, jeśli potrzebujesz Pythona 3.x wewnątrz virtualenv, a twój Ansible używa Pythona 2.x. Ponieważ Ansible używa Python2, generuje komendę 'pip2 install', która omija virtualenv i zamiast tego używa jakiejkolwiek instalacji na poziomie systemu - stąd pakiety instalowane są na poziomie systemowym, a nie virtualenv.Dla tej konfiguracji z Pythonem 3 musiałem użyć poleceń powłoki do stworzenia wirtualnej instalacji i pip. – RichVel
Co działa "shell: source" {{app_home}} /. Virtualenvs/myenv/bin/activate "&& pip3 install -r" {{app_home}}/tests/requirements.txt "". – RichVel
Z ansibl 2.0 można określić wersję Pythona dla virtualenv z virtualenv_python
Na przykład:
- name: Initiate virtualenv
pip: virtualenv="{{ virtualenv_dir }}"
virtualenv_python=python3.4
requirements={{ app_dir }}/requirements.txt
było już możliwe w Ansaly 1. * przy użyciu 'virtualenv_command' np. 'virtualenv_command:" python3.4/path/to/virtualenv "' – Stefano
Robi to, prosząc o podanie nazwy lub wymagań. Czy muszę ustawić jedną z tych opcji? Czy istnieje sposób na utworzenie pustego virtualenv – user204088
@ user204088 i dlaczego potrzebujesz pustego virtualenv? Odpowiedni moduł pip ładnie tworzy jeden dla ciebie, jeśli nie istnieje, lub użyj go, jeśli ma ... – Stefano
Prawdopodobnie już to wymyśliłeś, ale wymaga podania nazwy/wymagań, ponieważ pip musi wiedzieć, co zainstalować. Nie może być użyty zgodnie z powyższym opisem wyłącznie do tworzenia środowiska wirtualnego. Zamiast tego tworzy wirtualne środowisko podczas instalacji określonych pakietów. – William