在开发过程中有Ansible pip update python包

时间:2013-09-12 14:12:29

标签: python pip ansible

我一直在编写一些Ansible游戏来设置python virtualenv,并且在开发期间更新python包并重新启动服务器。我有问题虽然获得pip更新包。我真的不在乎这是怎么做的,但我更喜欢在开发过程中只是在virtualenv中添加python路径的路径然后只是重新启动服务器,但我还没有想出如何在Ansible中做到这一点。

所以我的问题是如何设置一个本地git repo,它可以安装到virtualenv的site-packages中,也可以使用正确的virtualenv设置Ansible到sys.path.insert的位置。

目前我正在尝试:

sudo pip install ~/workspace/python-repo

在我安装软件包之前,我将一个我从Authenticator重命名的类重命名为像Authen这样的完全错误的类。该课程在全新安装期间显示Authen。然后我将类名更改回正确的名称(Authenticator),碰撞版本并运行

sudo pip install ~/workspace/python-repo --upgrade

但在检查site-packages中的实际文件后,它仍会显示Authen名称而不是更新的文件。

如何在开发过程中使用本地仓库并在我的环境中获取即时更新文件?以及通过Ansible将其作为可重复的过程。

以下是我在Ansible尝试做的事情。我的第一个游戏是设置我只想运行一次的环境。

- name: Install python-repo
local_action: pip name=${python_root}
                  virtualenv=${working_dir}/development

$ {python_root}只是我的python项目的位置,当然工作目录是新的virtualenv设置。

然后我想要一个开发游戏来更新virtualenv中的python repo。这是我到目前为止所做的,但这也不起作用。

- name: Update python-repo
local_action: pip  name=${python_root}
                   virtualenv=${working_dir}/development
                   state=latest

- name: Restart services.
  local_action: service name=${item} state=restarted
  with_items: ${services} 

1 个答案:

答案 0 :(得分:11)

我将把这个作为正确答案发给其他所有人,让他们回过头来参考。

目前我有一个Ansible游戏,通过安装本地python包然后创建virtualenv并将所有内容安装到开发中来设置环境。首先,在设置virtualenv并将本地git repo安装到环境中时,我在Ansible中使用这些任务。

- name: Source virtualenvwrapper.
  local_action: shell /usr/local/bin/virtualenvwrapper.sh 
                    executable=/bin/bash

- name: Set Enviroment to working directory.
  local_action: shell export WORKON_HOME=${working_dir}

- name: Set pip to use working virtual enviroment.
  local_action: shell export PIP_VIRTUALENV_BASE=$WORKON_HOME

- name: Create new virtualenv in development.
  local_action: pip requirements=${virtual_requirements} 
                  virtualenv=${working_dir}/development

- name: Install python-repo as editable 
  local_action: pip name=${python_root}
                  virtualenv=${working_dir}/development
                  extra_args='-e ${python_root}' 

现在我开始开发,当我准备好测试并运行它时,我使用不同的Ansible游戏来部署本地更改。我使用这些任务。

- name: Update python-repo
  local_action: pip name=${python_root}
                  virtualenv=${working_dir}/development
                  extra_args='--upgrade'

- name: Restart services.
  local_action: service name=${item} state=restarted
  with_items: ${services}

这会立即接受我的python更新并重新启动我的服务器。我花了很长时间来围绕这个问题来自php开发环境并且只需要按F5来接受更改。我想要一个好的python开发环境,我认为这是一个可接受的过程。