Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 设置具有Ansible pip错误的CoreOS_Python_Pip_Ansible_Ansible Playbook_Coreos - Fatal编程技术网

Python 设置具有Ansible pip错误的CoreOS

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 如果我试图执行此任务,则会出现以下错误: 致命:

我正在尝试使用Ansible提供coreOS盒。首先,引导程序使用

这似乎有效,但pip(位于/home/core/bin中)未添加到路径中。在下一步中,我将尝试运行安装docker py的任务:

- 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非常感谢