如何在Ansible中使用/usr/local/bin/python3 -m pip?执行报错求助
问题详情
我在受控节点上没有单独安装pip或pip3,所以没法用executable: pip3配置,于是写了下面的Ansible Playbook尝试安装Python包requests:
- name: "Install python package 'requests'" pip: name: requests executable: /usr/local/bin/python3 -m pip become: yes
执行时却出现了错误:
TASK [Install python package 'requests'] ************************** fatal: [integration]: FAILED! => changed=false cmd: '''/usr/local/bin/python3 -m pip'' install requests' msg: '[Errno 2] No such file or directory' rc: 2 stderr: '' stderr_lines: <omitted> stdout: '' stdout_lines: <omitted>
请问该怎么正确在Ansible里用/usr/local/bin/python3 -m pip作为pip可执行文件?
解决方法
原因
Ansible的pip模块里的executable参数只能填纯可执行文件的绝对路径,不能带任何额外参数(比如-m pip)。你把/usr/local/bin/python3 -m pip填进去后,Ansible会把这整串当成一个文件路径去查找,自然找不到对应的文件,所以报错。
正确写法
直接用command模块执行python3 -m pip install命令即可,无需通过pip模块:
- name: "Install python package 'requests'" command: /usr/local/bin/python3 -m pip install requests become: yes args: warn: false # 关闭Ansible关于推荐使用pip模块的警告
如果需要确保包是最新版本,可以加上--upgrade参数:
- name: "Install/upgrade python package 'requests'" command: /usr/local/bin/python3 -m pip install --upgrade requests become: yes args: warn: false
要是你的系统里连pip模块都没有(部分极简Python环境会出现这种情况),可以先执行ensurepip来安装pip模块,再进行包安装:
- name: 确保pip模块可用 command: /usr/local/bin/python3 -m ensurepip --upgrade become: yes args: warn: false - name: Install python package 'requests' command: /usr/local/bin/python3 -m pip install requests become: yes args: warn: false
内容的提问来源于stack exchange,提问作者Sangria
相关产品推荐
相关产品推荐

