当我使用setup.py安装它时,为什么我找不到ansible?

时间:2017-08-22 14:58:29

标签: python macos installation pip setup.py

因为我在Ansible(我在Mac上)遇到了一些问题,这个问题似乎在今天最新的dev版本中得到修复,我通过pip(sudo pip uninstall ansible)卸载了ansible,并从github repo重新安装了最新的dev版本使用经典的setup.py方法,该方法似乎成功结束(full output here

然后我尝试使用它:

$ ansible --version
-bash: ansible: command not found
$ which ansible
$

我检查了它的安装位置。从我上面链接的完整输出中我发现它安装在/usr/local/lib/python2.7/site-packages中,确实在那里我找到了一个鸡蛋:

$ ls -l /usr/local/lib/python2.7/site-packages | grep ansible
drwxr-xr-x    4 root    admin     136 Aug 22 16:33 ansible-2.4.0-py2.7.egg

当我启动Python并检查site-packages文件夹时,我找到了一个不同的文件夹:

>>> import site; print site.getsitepackages()[0]
/usr/local/Cellar/python/2.7.13_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages

但这是同一文件夹的符号链接:

$ ls -l /usr/local/Cellar/python/2.7.13_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages
lrwxr-xr-x  1 hielke  admin  54 Aug 13 22:36 /usr/local/Cellar/python/2.7.13_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages -> ../../../../../../../../../lib/python2.7/site-packages

所以我想问题是没有为/usr/local/bin/中的ansible包创建符号链接。但我不确定如何创建这样的符号链接以及为什么它不会出现在第一位。

有谁知道我怎么能从这里前进?欢迎所有提示!

10 个答案:

答案 0 :(得分:7)

对于使用 Windows 10 Ubuntu 终端的用户,运行此命令应该可以解决问题:

export PATH=$PATH:~/.local/bin

答案 1 :(得分:3)

当您从shell调用ansible时,bash将在您的$PATH中搜索可执行的名为ansible的文件。这可能不是唯一的问题,但这是您所看到的错误的直接原因。 .egg文件本身不是可执行文件,它只是用于分发代码的文件。

如果ansible已正确安装,您应该可以使用locate或OSX Finder GUI找到它。名称应完全匹配,没有文件扩展名。您可能还会在找到ansible-connection可执行文件的同一位置找到ansible-consoleansible等。如果你找到了,太棒了!测试一下,然后将该目录添加到终端中的$PATH,如下所示:

export PATH=$PATH:/path/to/ansible

其中/path/to/ansible是您找到可执行文件的目录。对$PATH变量的此更改是临时的,当您关闭shell时它将消失。如果您现在可以从bash运行ansible,那么您可以通过将该导出添加到$HOME/.bash_profile文件的末尾,或者通过在/etc/paths.d中添加规则(Apple推荐)来永久更改。如果您不熟悉那些here,请详细了解如何做到这些。{/ p>

现在,如果这不是问题而你找不到ansible可执行文件,那么安装本身就是你的问题。您也可以尝试使用虚拟环境(如果已安装),以确保您从github中提取的版本没有损坏:

git clone https://github.com/ansible/ansible.git
cd ansible
virtualenv venv
source venv/bin/activate
pip install .
which ansible

在撰写本文时,上面的内容为我提供了ansible安装工作。

答案 2 :(得分:3)

好吧,我认为您只需要创建一个软链接

ln -s /Users/${yourname}/Library/Python/${python version}/bin/ansible /usr/local/bin/ansible

答案 3 :(得分:1)

查找ansible在Mac上的位置。大多数情况下,其/Users/<yourusername>/Library/Python/3.7/bin/Users/<yourusername>/Library/Python/2.7/bin。然后...

export PATH=$PATH:/Users/<yourusername>/Library/Python/3.7/bin

您可以将其存储在.bashrc文件中。

答案 4 :(得分:0)

我建议根据the method suggested in the Ansible docs使用pip卸载Ansible并重新安装它:

  

或者如果您正在寻找最新的开发版本:

     

pip install git+https://github.com/ansible/ansible.git@devel

     

如果您在OS X Mavericks上安装,您可能会遇到编译器的一些噪音。解决方法是执行以下操作:

     

$ sudo CFLAGS=-Qunused-arguments CPPFLAGS=-Qunused-arguments pip install ansible

     

使用virtualenv的读者也可以在virtualenv下安装Ansible,不过我们建议不要担心它,只需在全局安装Ansible。不要使用easy_install直接安装ansible。

答案 5 :(得分:0)

当我安装ansible时,我遇到了同样的问题。运行以下命令以解决该问题。但是,如果要使用ansible,每次打开bash会话时都必须激活。

$ python -m virtualenv ansible 
$ source ansible/bin/activate
$ pip install ansible 

答案 6 :(得分:0)

我使用的是zsh,因此在我的/Users/arojas/.zshrc中添加了以下行,这是Python安装Ansible的地方

export PATH="$PATH:$HOME/Library/Python/3.7/bin"

答案 7 :(得分:0)

我遇到了同样的问题,并且在安装pip3 install ansible后就可以使用了。

答案 8 :(得分:0)

      system/instance used: ec2 RH8, as root
      # pip3 install ansible           (not recommended - should be by a user) 
      # ansible --version              ( not found - wtf?!)
      # yum install mlocate
      # update
      # locate ansible                 (long output; scroll to where you input command)
      # export PATH=$PATH:/usr/local/bin     
      # ansible --version               (success, Yes!)

答案 9 :(得分:0)

  system/instance used: ec2 RH8, as root
  # pip3 install ansible           (not recommended - should be by a user) 
  # ansible --version              ( not found - :( )
  # yum install mlocate
  # updatedb (updatedb creates or updates a database used by locate)
  # locate ansible (TL;DR)
  # export PATH=$PATH:/usr/local/bin (Add this line to .bashrc)
  # source .bashrc (To reflect the changes in the bash)  
  # ansible --version               (success, Yes!)