安装后未将awscli添加到路径中

87

我按照官方的亚马逊指南安装了aws cli。

sudo pip install awscli

然而,在我的路径中找不到 aws。安装似乎是成功的。有许多文件位于 /Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/awscli,但没有可执行文件名为 aws。我的 Python 版本是 3.3.4,pip 版本是 1.5.4,在 OS X 10.9 上运行此命令。可能出了什么问题?

谢谢!


你能导入吗?你检查过PYTHONPATH中的库了吗? - Shawn Zhang
你为什么使用sudo?这真的有必要吗? - CGTheLegend
17个回答

122

完善原帖答案

原帖作者回答了自己的问题,但可执行文件的确切位置更可能是不同的。因此,让我们分解一下为什么他的解决方案有效,这样你也可以将其应用到自己身上。

问题描述

有许多文件位于 /Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/awscli,但没有名为aws的可执行文件。

解决方案中了解

解决方案是将 /Library/Frameworks/Python.framework/Versions/3.3/bin 添加到我的 PATH 路径中。

学点东西

比较这些路径以找出它们的共同之处:

/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/awscli
/Library/Frameworks/Python.framework/Versions/3.3/bin

请注意它们在libbin不同的方向发散。考虑到操作员声明,“没有名为aws的可执行文件。” 这就带给我们第一个学习经验:

  • 可执行文件往往不在lib文件夹中。
  • 查找具有共同血统的bin文件夹。

在这种情况下,我建议通过查找bin文件夹来解决:

find /Library/Frameworks/Python.framework -type d -name bin

但是,如果你打算这样做,你也可以通过以下方式搜索可执行文件:

find /Library/Frameworks/Python.framework -type f -perm -100 -name aws
# the `-` in `perm -100` means not an exact match of 100
# but any octal that includes 100

但是等等

OP是如何知道要查找/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/的呢?

最简单的答案也是我们下一个学习课程:

  • 询问你的python安装在哪里。

这是我如何做到的:

$ python -c 'import awscli; print(awscli)'
<module 'awscli' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/awscli/__init__.pyc'>

$ python3 -c 'import awscli; print(awscli)'
<module 'awscli' from '/System/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/awscli/__init__.py'>

我有两个Python版本,它们都没有使用与OP相同的路径或者路径格式。

应用我们所学到的知识

$ find /System/Library/Frameworks/Python.framework -type d -name bin
/System/Library/Frameworks/Python.framework/Versions/2.7/bin
/System/Library/Frameworks/Python.framework/Versions/3.6/bin

$ find /System/Library/Frameworks/Python.framework -type f -perm -100 -name aws
/System/Library/Frameworks/Python.framework/Versions/2.7/bin/aws
/System/Library/Frameworks/Python.framework/Versions/3.6/bin/aws

正如您所看到的,我有两个bin文件夹和两个aws可执行文件。我可能想要使用Python3.6版本。但是,如果我正在为使用Python2.7版本的远程系统进行本地试验和错误工作,我将希望使用该版本。这就是为什么我安装了两个版本的原因。


17
Stack Overflow上我找到的最佳答案之一。谢谢! - Pawel Janicki
2
@VishalDesai 你现在的感受正是我为什么会添加像 https://dev59.com/Cm455IYBdhLWcg3wAvRI#41994024 中的第四步骤一样的东西。当你想要快速解决问题时,这样的列表确实很难处理。但是,这些只适用于与作者完全匹配的系统。我在尝试了所有我能找到的答案都无法解决问题之后才编写这样的答案。这些答案被链接到我的DevOps团队手册中,因为我们有很多非标准系统需要支持。我编写的答案适用于所有这些系统。希望这对更多人有所帮助。很抱歉它没有对你起作用。好好休息一下。 - Bruno Bronosky
2
对昨天的评论表示道歉。第二条评论实际上对我起了作用。我休息一下,恢复精神后,不久之后就找到了解决办法。 - Vishal Desai
2
@BrunoBronosky,感谢您的回答,当有人花费宝贵的时间为了共同利益而详细地解释事情时,这对人类来说是一种很好的表现。 - davecoffin
1
@danmux 是正确的,新的 MacOS 安全模型希望您使用 --user 安装而不是 sudo 安装。这就是为什么 python -c 'import awscli; print(awscli)' 如此重要的原因。它将检测到该路径。所有的 SO 答案都应该解释“如何得到答案”,而不是“这对我有用”。并不是要批评。我意识到有些人不知道如何进行研究。在这种情况下,他们的答案可能会帮助其他人来扩展它以使其更加普遍。这是一个很好的例子。 - Bruno Bronosky
显示剩余2条评论

83

这对我在Mac上起作用:

sudo -H pip install awscli --upgrade --ignore-installed six

1
这是一种简单的解决方案,非常适合那些不太懂技术但需要快速运行的人。 - athul
4
有人可以解释一下这是如何运作的吗?它没有任何问题就运行了。 - tt_Gantz
1
由于某种原因,这也适用于使用pip3安装AWS Python 3版本。 - renatoaraujoc
传说中的Dheeraj! :) - Yavar
由于我已经在anaconda3下安装了Python,所以这个并没有对我起作用。谢谢。 - VelLes
是的!谢谢!最佳解决方案。尝试了上面的几个,但只有这一个起作用。 - Sharkboots

44

28
在Ubuntu上使用pip3进行非sudo安装时,正确的路径添加位置是~/.local/bin
export PATH=$HOME/.local/bin:$PATH

1
FYI:该答案仍适用于Ubuntu 22.04! - Vad1mo

11

解决方案是添加

/Library/Frameworks/Python.framework/Versions/3.3/bin

到我的路径。


或者,无论您的 Python 位于何处(在我的情况下,它位于 /opt/local/Library/Frameworks/Python.framework/Versions/3.4) - Yevgeniy
2
这是一个非常“自私”的答案选择。它对社区毫无帮助。 - Bruno Bronosky
我采用了你的答案,并在https://dev59.com/yGAg5IYBdhLWcg3wq8aU#42984351上进行了解释。 - Bruno Bronosky

9
可以使用 pip show awscli 命令查找安装位置。
$ pip show awscli
Name: awscli
Version: 1.16.94
Summary: Universal Command Line Environment for AWS.
Home-page: http://aws.amazon.com/cli/
Author: Amazon Web Services
Author-email: UNKNOWN
License: Apache License 2.0
Location: /root/.local/lib/python2.7/site-packages
Requires: s3transfer, colorama, rsa, docutils, botocore, PyYAML
Required-by:

1
谢谢,这个帮助我快速缩小了范围 :)。 - John Humphreys

3

我从OSX 10.7升级到OSX 10.9后,我的aws安装不再起作用。

我观察到出现了如下错误:

$ pip
Traceback (most recent call last):
  File "/usr/local/bin/pip", line 5, in <module>
    from pkg_resources import load_entry_point
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources.py", line 2603, in <module>
working_set.require(__requires__)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources.py", line 666, in require
needed = self.resolve(parse_requirements(requirements))
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources.py", line 565, in resolve
    raise DistributionNotFound(req)  # XXX put more info here
pkg_resources.DistributionNotFound: pip==1.5.5

操作系统升级导致权限发生了变化,解决方案如下:

提示:

sudo pip <--- 可以使用

pip <--- 无法使用

我采取了以下措施:

sudo chmod -R a+r /Library/Python/

之后,我又可以使用aws命令了。

不确定这是否对其他人有帮助,但我想将其加入其中。


3

在virtualenv中安装时:'pip install awscli'(不需要sudo)在OS X上可以正常使用;但是在CentOS release 6.6上无法使用,例如'which aws'找不到。解决方案:

chmod u+x /PATH-TO-YOUR-VIRTUALENV/bin/aws

1

如果您具有管理员权限,请直接编辑paths文件。

如果您没有管理员权限,肯定要选择顶部答案,但是如果您有管理员权限,我强烈建议直接编辑位于/etc/pathspaths文件。

使用您喜欢的编辑器,然后在新行上粘贴所需的路径即可:

示例paths文件:

/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/Users/username/Library/Python/3.6/bin #new path added here at bottom of file

将位置搜索二进制文件的粘贴到顶部、底部或任何顺序中(如果存在重名二进制文件)。使用“paths”文件可以避免记忆连接语法的麻烦,或者在编写错误的导出语句时可能会遇到问题。保留html标签。

1
我通常所做的是将可执行文件复制到/usr/local/bin
cp $(find / -name aws) /usr/local/bin

非常好的答案!谢谢! - Humanier
在我的情况下,AWS 在 /usr/bin 中,我从那里复制了它。 - Dnyaneshwar Harer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接