【问题标题】:Using pyenv in Ansible在 Ansible 中使用 pyenv
【发布时间】:2016-02-16 12:03:24
【问题描述】:

我正在使用 Ansible 设置基于 Ubuntu 的 Vagrant 和 DigitalOcean 盒子,并希望使用 pyenv 来管理几个不同网站的环境。

我在尝试使用已安装的 pyenv 安装 python 版本时遇到权限问题,这可能是由于我缺乏基本的 *nix 知识。

我有一个deploy 用户和组,我已经为他们安装了 pyenv,但显然由于下面的最终任务失败,用户正在做某事(为清楚起见,所有变量都替换为字符串):

- name: Install pyenv
  git:
    repo: https://github.com/yyuu/pyenv.git
    dest: "/home/deploy/.pyenv"

- name: Install pyenv-virtualenv plugin
  git:
    repo: https://github.com/yyuu/pyenv-virtualenv.git
    dest: "/home/deploy/.pyenv/plugins/pyenv-virtualenv"

- name: Add path etc to .bashrc.
  lineinfile:
    dest: "/home/deploy/.bashrc"
    state: present
    create: yes
    line: "{{ item }}"
  with_items:
    - 'export PYENV_ROOT="$HOME/.pyenv"'
    - 'export PATH="$PYENV_ROOT/bin:$PATH"'
    - 'eval "$(pyenv init -)"'
    - 'eval "$(pyenv virtualenv-init -)"'

- name: Ensure .pyenv permissions are set properly
  file: path=/home/deploy/.pyenv
        recurse=yes
        owner=deploy
        group=deploy
        state=directory

- name: Install default python version
  become: yes
  become_user: 'deploy'
  shell: . /home/deploy/.bashrc && pyenv install 3.5.1
    creates="/home/deploy/.pyenv/versions/3.5.1"

当做vagrant up 时一切正常,直到:

TASK [python : 安装默认 python 版本] ********************************* 致命:[192.168.33.15]:失败! => {“已更改”:true,“cmd”:“./home/deploy/.bashrc && pyenv install 3.5.1”,“delta”:“0:00:00.002111”,“end”:“2016-02 -16 11:48:26.930971”,“失败”:真,“rc”:127,“开始”:“2016-02-16 11:48:26.928860”,“stderr”:“/bin/sh:1: pyenv:未找到”,“stdout”:“”,“stdout_lines”:[],“警告”:[]}

更新:如果它很重要,在这种情况下(Vagrant 框)我的 vagrant.yml 剧本将 remote_user 设置为 vagrant

- name: Create a virtual machine via vagrant
  hosts: all
  become: yes
  become_method: sudo
  remote_user: vagrant
  ...

更新 2: 如果我以 deploy 用户身份 ssh 进入 Vagrant VM,那么我可以使用 pyenv OK。如果我以vagrant 的身份登录,然后sudo -u deploy bash -i 我得到pyenv: command not found...

更新 3:问题的根源可能是在使用 sudo 切换到 deploy 用户时,/home/deploy/.bashrc/home/deploy/.profile 都不是来源(由每个文件的echoing 测试),但在以deploy 登录时。但是,我认为 /home/deploy/.bashrc 是由失败的任务提供的 - 回显文本出现在标准输出中。

【问题讨论】:

    标签: vagrant ansible pyenv


    【解决方案1】:

    因为你的错误是:

    pyenv:未找到

    只需尝试在您的任务中使用 pyenv 的绝对路径即可。这是处理shell 任务的推荐方式:

    登录你的机器并找出pyenv的路径

    which pyenv
    

    然后将您的任务更改为

     # /path/to/pyenv is the result of the previous command
     ... 
     shell: . /home/deploy/.bashrc && /path/to/pyenv install 3.5.1
     ...
    

    【讨论】:

    • 这么简单的事情!非常感谢。我花了一天的时间来解决这个问题。我将该行更改为shell: . /home/deploy/.bashrc && /home/deploy/.pyenv/libexec/pyenv install 3.5.1,它可以工作。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 2020-08-23
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多