2014-10-16 110 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