Ansible virtualenv下pip3安装requirements报错

当你python版本设置正确后

- name: create venv
  shell: python36 -m venv {{ VENV }}
  become: true
  become_user: "{{ SERVICE_USER }}"
- name: Install required python modules
  command: "{{ VENV }}/bin/pip3.6 install -r /home/marin/marin-insights-service/requirements.txt"
  become: true
  become_user: "{{ SERVICE_USER }}"

问题1: pip 模块问题

ansible step:

- name: Pip install reqs
  pip:
    requirements: /$HOME/requirements.txt
    virtualenv: {{ VENV }}
  become: true
  become_user: "{{ SERVICE_USER }}"

error:

TASK [xxxx : Check that the service has started] *********************************************************************************************
fatal: [xxxxx]: FAILED! => {"changed": true, "cmd": "pgrep python -u marin", "delta": "0:00:00.209812", "end": "2020-05-18 23:40:24.777255", "failed_when_result": true, "msg": "non-zero return code", "rc": 1, "start": "2020-05-18 23:40:24.567443", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}

问题2:(由于安装的python3.6.4,想默认使用pip3.6安装requirements)

ansible step:

- name: Pip install reqs
  pip:
    requirements: /$HOME/requirements.txt
    virtualenv: {{ VENV }}
    executable: pip3.6
  become: true
  become_user: "{{ SERVICE_USER }}"

error

TASK [xxxx : Install required python modules] ************************************************************************************************
fatal: [fxxx]: FAILED! => {"changed": false, "msg": "parameters are mutually exclusive: executable|virtualenv"}

根据官方文档,错误是 executable无法和virtualenv 2个parameters并行
https://docs.ansible.com/ansible/latest/modules/pip_module.html

最终的workaround:
使用command在virtualenv path下直接运行pip3.6

- name: Install required python modules
  command: "{{ VENV }}/bin/pip3.6 install -r /home/marin/marin-insights-service/requirements.txt"
  become: true
  become_user: "{{ SERVICE_USER }}"
``
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。