2014-10-16 16 views
37

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 

Odpowiedz

14

Można to zrobić za pomocą modułu pip i konkretnego virtualenv binarnym:

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

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

+4

@ 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

+1

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

43

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)

+1

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

+3

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

+0

Co działa "shell: source" {{app_home}} /. Virtualenvs/myenv/bin/activate "&& pip3 install -r" {{app_home}}/tests/requirements.txt "". – RichVel

5

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 
+1

było już możliwe w Ansaly 1. * przy użyciu 'virtualenv_command' np. 'virtualenv_command:" python3.4/path/to/virtualenv "' – Stefano

Powiązane problemy