为啥我使用 setup.py 安装时找不到 ansible?
Posted
技术标签:
【中文标题】为啥我使用 setup.py 安装时找不到 ansible?【英文标题】:Why can't I find ansible when I install it using setup.py?为什么我使用 setup.py 安装时找不到 ansible? 【发布时间】:2018-01-30 22:37:35 【问题描述】:因为我在使用 Ansible(我在 Mac 上)时遇到了一些问题,今天我通过 pip (sudo pip uninstall ansible
) 卸载了 Ansible,并使用 github 存储库重新安装了最新的开发版本经典的 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 包创建符号链接。但我不确定如何创建这样的符号链接,以及为什么它一开始就不会出现。
有人知道我如何从这里继续前进吗?欢迎所有提示!
【问题讨论】:
你能显示你的环境变量吗,我无法重现它。 @aristotll - 我不确定你指的是哪个环境变量,但可以肯定的是,这里是os.environ
的完整粘贴:pastebin.com/b0AuuAaV 这能告诉你什么吗?
你能显示which python
的结果吗?
@aristotll - /usr/local/bin/python
@techraf - 奇怪的是 pip 似乎确实调用了 brew 安装的 python。当我执行cat $(which pip)
时,文件的第一行显示为#!/usr/local/bin/python
,这是安装了brew 的Python 的符号链接:ls -l /usr/local/bin/python
给了我/usr/local/bin/python -> ../Cellar/python/2.7.13_1/bin/python
。我认为主要问题是在 /user/local/bin/
中没有为 ansible 包创建符号链接。但我不知道该怎么做。
【参考方案1】:
我建议卸载 Ansible 并根据the method suggested in the Ansible docs 使用pip
重新安装它:
或者,如果您正在寻找最新的开发版本:
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。
【讨论】:
感谢您的建议!你的第一个建议pip install git..
运行没有问题,但之后命令ansible --version
仍然给我-bash: ansible: command not found
,即使我可以完美地在Python 中import ansible
。卸载它(再次成功)后,我尝试了您的第二个建议,该建议成功完成,但也给了我一个-bash: ansible: command not found
,即使 Python 中的import ansible
也可以正常工作。我想这只是/usr/local/bin/
中的一个符号链接丢失了,我不知道如何创建它。有什么想法吗?
@kramer65 您是否尝试在安装后从新的 shell 运行它?或者,如果在 virtualenv 中安装,将其停用并再次激活,或者直接从 virtualenv 的二进制子目录运行它(Windows 上为Scripts
,否则为bin
)。【参考方案2】:
当您从 shell 调用 ansible
时,bash 将在您的 $PATH
中搜索名为 ansible 的可执行文件。这可能不是唯一的问题,但这是您看到的错误的直接原因。 .egg
文件本身不是可执行文件,它只是一个用于分发代码的文件。
如果 ansible 已正确安装,您应该可以使用 locate 或 OSX Finder GUI 找到它。名称应该完全匹配,没有文件扩展名。您可能还会在找到ansible
可执行文件的相同位置找到ansible-connection
、ansible-console
等。如果你找到了,太好了!对其进行测试并将该目录添加到终端中的$PATH
,如下所示:
export PATH=$PATH:/path/to/ansible
/path/to/ansible
是您找到可执行文件的目录。 $PATH
变量的这种更改是暂时的,并且会在您关闭 shell 时消失。如果您现在可以从 bash 运行 ansible,那么您可以通过将该导出添加到您的 $HOME/.bash_profile
文件的末尾,或者通过在 /etc/paths.d
中添加一条规则来使更改永久化(Apple 推荐)。如果您不熟悉这些here,请查看更多关于如何执行这些操作的信息。
现在,如果这不是问题并且您找不到ansible
可执行文件,那么安装本身就是您的问题。您也可以尝试使用虚拟环境(如果您已安装)以确保您从 github 提取的版本没有损坏:
git clone https://github.com/ansible/ansible.git
cd ansible
virtualenv venv
source venv/bin/activate
pip install .
which ansible
在撰写本文时,以上内容为我提供了一个有效的 ansible
安装。
【讨论】:
我不知道locate
命令,它很有帮助。它为我找到了以下可执行文件,我可以手动调用它来运行 ansible:/usr/local/Cellar/python/2.7.13_1/Frameworks/Python.framework/Versions/2.7/bin/ansible
。我现在应该在/usr/local/bin/
中手动创建指向该文件的符号链接,我应该将文件夹/usr/local/Cellar/python/2.7.13_1/Frameworks/Python.framework/Versions/2.7/bin/
添加到我的路径中,还是您还有其他建议?
您可以手动创建符号链接like so,也可以像我在帖子中提到的那样将/usr/loca/Cellar/.../2.7/bin
文件夹添加到$PATH
变量中。如果您使用 pip 安装的不仅仅是 ansible,我会推荐第二种方法,但如果您只想要 ansible,则符号链接很好。
太棒了,解决了它,另外我还学到了一两件事。谢谢!【参考方案3】:
查找 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】:好吧,我想你只需要创建一个软链接
ln -s /Users/$yourname/Library/Python/$python version/bin/ansible /usr/local/bin/ansible
【讨论】:
【参考方案5】:我在安装 ansible 时遇到了同样的问题。运行以下命令来解决问题。但是如果我们想使用 ansible,每次打开 bash 会话时都必须激活。
$ python -m virtualenv ansible
$ source ansible/bin/activate
$ pip install ansible
【讨论】:
【参考方案6】:我正在使用 zsh,所以在我的 /Users/arojas/.zshrc
中添加了这一行,这就是我的 Ansible 通过 Python 安装的地方
export PATH="$PATH:$HOME/Library/Python/3.7/bin"
【讨论】:
【参考方案7】:我遇到了同样的问题,安装后使用pip3 install ansible
现在一切正常。
【讨论】:
【参考方案8】:对于那些使用 Windows 10 Ubuntu 终端的用户,运行此命令应该可以解决问题:
export PATH=$PATH:~/.local/bin
【讨论】:
这个问题是针对 macOS 的【参考方案9】: 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!)
【讨论】:
【参考方案10】: 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!)
【讨论】:
欢迎来到 Stack Overflow。请阅读How to Answer。我不知道这应该如何回答这个问题。【参考方案11】:pip3 install ansible --user
这安装在 ~/.local 中。只需将其包含在 PATH 中,它将起作用
例如:export PATH="$PATH:~/.local/bin"
【讨论】:
以上是关于为啥我使用 setup.py 安装时找不到 ansible?的主要内容,如果未能解决你的问题,请参考以下文章