Python 设置具有Ansible pip错误的CoreOS
我正在尝试使用Ansible提供coreOS盒。首先,引导程序使用 这似乎有效,但pip(位于/home/core/bin中)未添加到路径中。在下一步中,我将尝试运行安装docker py的任务:Python 设置具有Ansible pip错误的CoreOS,python,pip,ansible,ansible-playbook,coreos,Python,Pip,Ansible,Ansible Playbook,Coreos,我正在尝试使用Ansible提供coreOS盒。首先,引导程序使用 这似乎有效,但pip(位于/home/core/bin中)未添加到路径中。在下一步中,我将尝试运行安装docker py的任务: - name: Install docker-py pip: name=docker-py 由于pip的文件夹不在路径中,因此我使用ansible: environment: PATH: /home/core/bin:$PATH 如果我试图执行此任务,则会出现以下错误: 致命:
- name: Install docker-py
pip: name=docker-py
由于pip的文件夹不在路径中,因此我使用ansible:
environment:
PATH: /home/core/bin:$PATH
如果我试图执行此任务,则会出现以下错误:
致命:[192.168.0.160]:失败!=>{“changed”:false,“cmd”:“/home/core/bin/pip安装docker py”,“failed”:true,“msg”:“\n:stderr:/home/core/bin/pip:line 2:basename:找不到命令\n/home/core/bin/pip:line 2:/root/pypypy/bin/:没有这样的文件或目录\n”}
我要问的是
/root/pypy/bin/
从何而来似乎这就是问题所在。有什么想法吗?在设置Ansible变量时,不能使用shell样式的变量扩展。在这份声明中
environment:
PATH: /home/core/bin:$PATH
…您正在将PATH
环境变量设置为文本值/home/core/bin:$PATH
。换句话说,您正在清除$PATH
的任何现有值,这就是为什么对于basename
之类的基本内容会出现“command not found”错误的原因
考虑在现有的$PATH
中的某个位置安装pip
,在调用ansible之前修改$PATH
,或者从shells脚本调用pip
:
- name: install something with pip
shell: |
PATH="/home/core/bin:$PATH"
pip install some_module
问题在于/home/core/bin/pip脚本,它实际上是:
#!/bin/bash
LD_LIBRARY_PATH=$HOME/pypy/lib:$LD_LIBRARY_PATH $HOME/pypy/bin/$(basename $0) $@
当ansible在root下运行时,$HOME
变量将替换为/root,而不是/HOME/core。
用
/HOME/core
更改$HOME
,它应该可以工作。只需查看错误消息,似乎basename:command not found
是可能导致/root/pypy/bin/
one的根本问题。一个有趣的事实是,如果我用ssh连接到盒子中并运行home/core/bin/pip install docker py
,那么命令执行时不会出现任何问题。只有在我从Ansible运行它时才会发生失败。感谢您的响应,在Ansible中使用shell脚本调用pip会产生同样的错误。您确定不再尝试在Ansible中设置路径吗?也许可以用你的新剧本更新你的问题。嘿,是的,漂亮的舒尔,我的yml如下:-主机:rancher server remote\u用户:coreos gather\u事实:True Been:yes Been\u方法:sudo任务:-名称:使用pip shell安装东西:| PATH=“/home/core/bin:$PATH”pip安装一些_模块
确定我的错误-主机:rancher server远程_用户:coreos任务:-名称:使用pip外壳安装一些东西:| PATH=/home/core/bin:$PATH pip安装docker py非常感谢