更新Python以与AWS CLI一起使用

时间:2013-09-09 19:30:55

标签: python amazon-web-services amazon-s3

我正在尝试在终端(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,安装了它,并使用'Update Shell Profile.command'功能来设置正确的PATH变量。

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

非常感谢任何帮助。我猜测它与终端没有使用新版本的Python有关,因此AWS CLI功能不起作用,但可能有一个我不知道的不同原因。

谢谢!

1 个答案:

答案 0 :(得分:4)

如果您使用Python 2.6附带的aws安装了easy_install,它将被硬编码以使用Python 2.6 - 它的第一行将是这样的:

#!/usr/bin/python2.6

shebang line表示该脚本将与/usr/bin/python2.6一起运行。安装Python 3.3不会改变/usr/bin/python2.6处的内容。它与PATH上的内容无关,或python上第一个名为PATH的内容。如果脚本在shebang行使用PATH,则/usr/bin/env才会发挥作用。 /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.3/usr/bin/env python3),这只会使其完全中断。 aws脚本需要将aws包安装到您的站点包中。您已将它们安装到2.6站点包中,但不安装在3.3站点包中。 (最重要的是,许多软件包为Python 2.x和3.x安装了不同的代码,因此2.6脚本可能不适用于3.3软件包,即使它在那里。)

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

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

pip-2.6 uninstall awscli
pip-3.3 install awscli

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

实际上,您不需要卸载软件包,只需要卸载最终位于/usr/local/binPATH上其他位置的脚本。我怀疑rm /usr/local/bin/aws*会处理这个问题,但要小心 - 确保没有其他安装的内容以aws开头但不属于软件包。

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