如何让Ansible pip模块调用python3 -m pip而非pip3?
解决Ansible pip模块无法使用
python3 -m pip的问题 问题出在Ansible的pip模块对executable参数的限制:该参数仅接受单个可执行文件的路径,不能包含命令行参数。你传入的"python3 -m pip"会被当作一个完整的文件名去系统中查找,自然找不到对应的可执行文件,从而报错。
以下是两种可行的解决办法:
方案1:沿用pip模块(推荐)
直接将executable设为python3即可。Ansible的pip模块会自动识别这是Python解释器路径,并以python3 -m pip的方式调用pip,正好满足你优先使用用户本地~/.local目录下pip版本的需求:
- name: Install the new {{ wheel }} pip: name: "/tmp/{{ name }}/dist/{{ wheel }}" executable: "python3" extra_args: --user
方案2:改用command模块自定义执行
如果需要完全自定义pip调用命令,可以使用command模块直接执行完整命令,同时通过changed_when让Ansible正确判断任务是否产生了变更:
- name: Install the new {{ wheel }} command: python3 -m pip install "/tmp/{{ name }}/dist/{{ wheel }}" --user register: pip_install_output changed_when: "'Successfully installed' in pip_install_output.stdout"
内容的提问来源于stack exchange,提问作者Mikhail T.
相关产品推荐
相关产品推荐

