7

我一直在编写一些 Ansible 脚本来设置 python virtualenv,并在开发过程中更新 python 包并重新启动服务器。尽管让 pip 更新软件包,但我遇到了问题。我真的不在乎这是如何完成的,但我更喜欢在开发过程中将路径添加到 virtualenv 中的 python 路径,然后重新启动服务器,但我还没有弄清楚如何在 Ansible 中做到这一点。

所以我的问题是如何设置一个本地 git 存储库,该存储库可以安装到 virtualenv 的站点包中,也可以设置 Ansible 到 sys.path.insert 使用正确的 virtualenv 存储库的位置。

目前我正在尝试做:

sudo pip install ~/workspace/python-repo

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

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

但是在检查站点包中的实际文件后,它仍然显示 Authen 名称而不是更新的文件。

我怎样才能做到这一点,以便在开发期间使用本地存储库并在我的环境中获取即时更新的文件?以及通过 Ansible 使其成为可重复的过程。

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

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

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

然后不知何故,我想要一个开发游戏来更新 virtualenv 中的 python 存储库。这是我到目前为止所拥有的,但这也不起作用。

- 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} 
4

1 回答 1

12

我将把它作为正确的答案发布给其他人,以供参考。

目前我有一个 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开发环境,我认为这是一个可以接受的过程。

于 2013-09-12T16:11:51.070 回答