更新Python以与AWS CLI一起使用

dad*_*der 3 python amazon-s3 amazon-web-services

我正在尝试在终端(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功能无法正常工作,但是可能是我不知道的其他原因。

谢谢!

aba*_*ert 5

如果您安装awseasy_installPython 2.6附带的,则将对其进行硬编码以使用Python 2.6-其第一行将如下所示:

#!/usr/bin/python2.6
Run Code Online (Sandbox Code Playgroud)

shebang行意味着该脚本将与运行/usr/bin/python2.6。安装Python 3.3不会改变/usr/bin/python2.6。它有没有关系什么的PATH,或者是所谓的第一件事python就是上PATH。该PATH只发挥作用,如果一个脚本使用/usr/bin/env的家当线。而且/usr/bin/env python2.6当然仍然可以找到Python 2.6。实际上,甚至/usr/bin/env python还可以找到Python 2.6,因为3.3没有任何命名为pythonjust的东西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软件包中也可能无法使用。)

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

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

pip-2.6 uninstall awscli
pip-3.3 install awscli
Run Code Online (Sandbox Code Playgroud)

不幸的是,因为您使用了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网站上的说明进行操作。