awscli not added to path after installation

2020-05-11 05:20发布

I installed the aws cli according to the offical Amazon directions.

sudo pip install awscli

However, aws is nowhere to be found in my path. The installation seems to have been successful. There are a number of files located at /Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/awscli, however there are no executables named aws. My python version is 3.3.4, my pip version is 1.5.4, and running this command on OS X 10.9. What could be wrong?

Thanks!

14条回答
手持菜刀,她持情操
2楼-- · 2020-05-11 05:46

I upgraded from OSX 10.7 to OSX 10.9 and afterwards, my installation of aws no longer worked.

I observed errors like this:

$ 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

The solution that the operating system upgrade had changed permissions.

Giveaway clue:

sudo pip <--- worked

pip <--- failed

So I did this:

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

and then afterwards, I'm able to use the aws commands again.

Not sure if this is something that will be helpful for others, but figured I'd throw it into the mix.

查看更多
不美不萌又怎样
3楼-- · 2020-05-11 05:50

Improving the OP's Answer

The OP answered their own question, but the exact location of the executable is more likely to be different than it is to be the same. So, let's break down WHY his solution worked so you can apply it to yourself.

From the problem

There are a number of files located at /Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/awscli, however there are no executables named aws.

From the solution

The solution was to add /Library/Frameworks/Python.framework/Versions/3.3/bin to the my PATH.

Let's learn something

Compare those paths to find their commonality:

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

Notice that they diverge at lib vs. bin. And consider that the OP stated, "there are no executables named aws." That brings us to our first learning lessons:

  • Executables tend to not be in lib folders.
  • Look for bin folders that share a common lineage.

In this case I would have suggested looking for bin folders via:

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

But, if you are going to do that, you might as well just search for your executable via:

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

But wait

How did OP know to look in their /Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/?

The easiest answer is also our next learning lesson:

  • Ask your python where things are installed.

Here is how I do that:

$ 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'>

I have 2 Pythons and neither of them use the same paths or even path patterns as the OP.

Apply what we've learned

$ 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

As you can see, I have 2 bin folders and 2 aws executables. I probably want to use the Python3.6 version. However, if I'm doing local trial and error work for a remote system that uses the Python2.7 version, I'm going to want to use that. And this is exactly why I have 2 version installed.

查看更多
等我变得足够好
4楼-- · 2020-05-11 05:50

Windows is likely the minority here, but adding below to my PATH worked for me. For reference, I installed the CLI via pip:

C:\Python27\Scripts
查看更多
Luminary・发光体
5楼-- · 2020-05-11 05:52

When installing in a virtualenv: 'pip install awscli' (without sudo) worked fine on OS X; but not on CentOS release 6.6, e.g. 'which aws' found nothing. The solution:

chmod u+x /PATH-TO-YOUR-VIRTUALENV/bin/aws
查看更多
ゆ 、 Hurt°
6楼-- · 2020-05-11 05:53

This worked for me on mac:

sudo -H pip install awscli --upgrade --ignore-installed six
查看更多
别忘想泡老子
7楼-- · 2020-05-11 05:56

The solution was to add

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

to the my PATH.

查看更多
登录 后发表回答