我正在尝试在终端(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功能不起作用,但可能有一个我不知道的不同原因。
谢谢!
答案 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/bin
或PATH
上其他位置的脚本。我怀疑rm /usr/local/bin/aws*
会处理这个问题,但要小心 - 确保没有其他安装的内容以aws
开头但不属于软件包。
同时,为了将来,安装pip
并使用它。对于Apple的Python 2.6,使用sudo easy_install pip
进行安装。对于Python 3.3,请按照pip
站点上的说明进行操作。