【问题标题】:Virtualenvwrapper mkvirtualenv command not found via ansible shell通过 ansible shell 找不到 Virtualenvwrapper mkvirtualenv 命令
【发布时间】:2017-02-23 13:25:00
【问题描述】:

我想通过 ansible 使用 virtualenvwrapper 创建一个 virtualenv。
我的默认变量:

wrapper_bin: '/usr/local/bin/virtualenvwrapper.sh'
virtualenv_dir: '/home/user/.envs'  

{{ project_name }} 来自额外变量

我的任务:

---
- name: Make a virtualenv
  shell: "{{ wrapper_bin }} && mkvirtualenv {{ project_name }}"
  args:
     executable: /bin/bash
     creates: "{{ virtualenv_dir}}/{{ project_name }}"

在远程机器上一切正常。
which virtualenvwrapper.sh 返回正确的方式/usr/local/bin/virtualenvwrapper.sh
但是 Ansible 抛出错误/bin/bash: mkvirtualenv: command not found

【问题讨论】:

标签: ansible virtualenv virtualenvwrapper


【解决方案1】:

在环境中添加PATH,例如:

---
- name: Make a virtualenv
  shell: "{{ wrapper_bin }} && mkvirtualenv {{ project_name }}"
  args:
    executable: /bin/bash
    creates: "{{ virtualenv_dir}}/{{ project_name }}"
  environment:
    path: /usr/local/bin:/usr/bin:/bin

这是 Ansible 最常见的问题之一 - 它运行 shell 非交互式、非登录会话,根据 shell 设计,它不会获取所有 rc 文件。结果是您在交互式登录时拥有的PATH 和在其环境中获得的PATH Ansible 不同。

【讨论】:

  • 谢谢,但还是同样的错误:/bin/bash: mkvirtualenv: command not found
【解决方案2】:
- name: Make a virtualenv
  shell: export PATH=$PYENV_ROOT/bin:$PATH mkvirtualenv {{ project_name }}

如果你使用pyenv

【讨论】:

    【解决方案3】:

    这对我有用

    - name: Create the required virtualenv
      shell: |
        export WORKON_HOME="{{ virtualenv_dir }}"
        export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
        . /usr/local/bin/virtualenvwrapper.sh
        mkvirtualenv "{{project_name}}" -p python3.6
      args:
        executable: /bin/bash
        creates: "{{ virtualenv_dir}}/{{ project_name }}"
      register: appServer_virtualenv
      become_user: "{{sudo_user}}"
    

    【讨论】:

      猜你喜欢
      • 2014-11-04
      • 1970-01-01
      • 1970-01-01
      • 2012-10-18
      • 2012-03-20
      • 2023-03-14
      • 2016-04-14
      • 2011-05-22
      • 2012-04-06
      相关资源
      最近更新 更多