3

我正在尝试在终端(Mac OS X v10.6.8)中使用 AWS CLI S3,并且在我运行基本命令(例如,aws s3 ls)时配置了所有正确的凭证后,它不会输出任何内容。

当我执行稍微复杂一点的命令(例如aws s3 mb s3://newbucketname)时,它会输出:__init__() keywords must be strings.

根据一些研究,我怀疑原因是默认安装了 Python 2.6.1,所以我下载了 v3.3.2,安装了它,并使用“更新 Shell Profile.command”功能来设置正确的 PATH 变量。

现在安装和配置了新版本的 Python,我仍然得到相同的结果。尽管 $PATH 变量指向新版本 (v3.3.2),但终端似乎仍在使用旧版本的 Python。

任何帮助将不胜感激。我猜这与终端不使用新版本的 Python 有关,因此 AWS CLI 功能不起作用,但可能有我不知道的不同原因。

谢谢!

4

1 回答 1

5

如果您安装awseasy_install是 Python 2.6 附带的,它将被硬编码为使用 Python 2.6——它的第一行将是这样的:

#!/usr/bin/python2.6

这个shebang 行意味着脚本将使用/usr/bin/python2.6. 安装 Python 3.3 不会改变/usr/bin/python2.6. PATH它与 上的内容或第一个被称为python的内容无关PATHPATH如果脚本/usr/bin/env在 shebang 行上使用,则唯一起作用。当然/usr/bin/env python2.6仍然会找到 Python 2.6。事实上,甚至/usr/bin/env python仍然会找到 Python 2.6,因为 3.3 没有任何名称python,只有python3.

同时,即使您设法破解它以使用 Python 3.3 运行(例如,通过将第一行更改为/Library/Frameworks/Python.framework/Versions/3.3/bin/python3.3or /usr/bin/env python3),这只会使其完全崩溃。该aws脚本要求将aws包安装到您的站点包中。您已将它们安装到 2.6 站点包中,但未安装到 3.3 站点包中。(最重要的是,许多包为 Python 2.x 和 3.x 安装了不同的代码,因此 2.6 脚本可能无法与 3.3 包一起使用,即使它在那里。)

无论如何,解决这个问题的正确方法是aws从 Python 2.6 卸载,然后为 Python 3.3 重新安装它。

如果您pip按照建议使用,这将是微不足道的:

pip-2.6 uninstall awscli
pip-3.3 install awscli

不幸的是,因为您使用了它,所以easy_install您必须手动卸载它。

真的,你不需要卸载包,只需要卸载/usr/local/bin你的PATH. 我怀疑rm /usr/local/bin/aws*会解决这个问题,但要小心——确保那里没有安装任何其他东西,aws但不是包的一部分。

同时,为了将来,安装pip和使用它。对于 Apple 的 Python 2.6,使用sudo easy_install pip来安装它。对于 Python 3.3,请按照pip站点上的说明进行操作。

于 2013-09-09T20:03:14.793 回答