Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

aws cli in cygwin - how to clean up differences in windows and cygwin style paths

I suspect this is my ineptitude in getting path variables set right, but I'm at a loss.

I've installed the aws cli using pip in cygwin.

pip install awscli

I have two python environments... a windows anaconda distribution, and the version cygwin can install for you.

which python 
> /usr/bin/python

where python
> C:\cygwin64\bin\python
> C:\windows-style-path-to-anaconda\python.exe

when I try to run aws cli

aws --version
> C:\windows-style-path-to-anaconda\python.exe: can't open file 
> 'cygdrive/c/cygdrive-style-path-to-anaconda/Scripts/aws': 
> [Errno 2] No such file or directory'

I've tried adding the path to aws to my windows path variable. No luck.

I've tried adding this to my .bashrc

export PATH="$PATH:/cygdrive/c/cygdrive-style-path-to-anaconda/Scripts"

No luck.

I've tried modifying the 'aws' that python is trying to run. First I modified the #! to point to the cygwin python instead of the windows python.

#!c:\cygwin64\bin\python

then it could find the file 'aws' to run... but it couldn't find any of the files to import... 'awscli.clidriver', 'botocore._', etc.

I tried modifying my path variables to point to the location of these... anaconda/Lib/site-packages... I even tried doing a sys.path.insert(1, path) in the 'aws' file itself.... it fixed that problem but every single file it loaded was looking in other places and not finding them, and it was too many things to mess with one at a time in the aws .py files.

here's what sort of works... in cygwin...

cd /cygdrive/c/cygwin-path-to-anaconda/Scripts
./aws --version
> aws-cli/1.10.26 Python/2.7.11 Windows/7 botocore/1.4.17

but there has to be a better way, right? either...

  • get my path variables set right

  • get the aws cli installed in the cygwin python directory instead of the windows anaconda environment

unfortunately, pip uninstall just hangs trying to remove awscli, and I don't know how to force it to use the cygwin python if I even could uninstall/reinstall. And after a bunch of tries at fixing my path variables, I'm at a loss.

Any advice appreciated.

like image 366
kmh Avatar asked May 10 '16 22:05

kmh


2 Answers

When running pip install awscli from cygwin, it may install awscli in Window's Anaconda Python installation, instead of in Cygwin's Python (which is what you want). Then, when running aws, you will get an error that the aws executable can't be found. The solution I found was installing python/pip inside cygwin by following below bash commands from cygwin shell:

pip uninstall awscli
wget rawgit.com/transcode-open/apt-cyg/master/apt-cyg
install apt-cyg /bin
apt-cyg install python
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
pip install awscli

Make sure you have wget installed in cygwin.

like image 106
Haritha Thilakarathne Avatar answered Nov 11 '22 13:11

Haritha Thilakarathne


After a LOT of time spent on this, I found a solution that works.

The primary issue is that the cygwin didn't come with python installed, and doesn't know where to find the existing Windows Anaconda version on your machine. This can be verified by running which python from within cygwin - it couldn't find where python is saved. Note that this can be confusing because running pip install awscli likely doesn't throw an error message. Cygwin actually installs awscli in the Window's Anaconda installation of Python (I find this odd since we didn't run conda install awscli).

HOWEVER, rather than try to point cygwin to the already installed version of Anaconda python on your machine it will save you a ton of headache to just install a cygwin-specific instance of python. The steps to do so are documented here: http://wiki.fast.ai/index.php/Awscli_in_cygwin

  1. pip uninstall awscli
  2. wget rawgit.com/transcode-open/apt-cyg/master/apt-cyg
  3. install apt-cyg /bin
  4. apt-cyg install python
  5. wget https://bootstrap.pypa.io/get-pip.py
  6. python get-pip.py
  7. pip install awscli

...Note, however, that the first command pip uninstall awscli "hung up" for me. So just escape out of it using quit() and continue with the others in order.

You can check that everything worked if you run which python in cygwin and it points to the cygin version (i.e. /usr/bin/python , as opposed to: /users/.../Anaconda2/).

Additionally, if you happen to be asking this in conjunction with watching the setup video for the fast.ai course (http://course.fast.ai/lessons/aws.html), then the next step is CRITICAL for Windows users: when you download all the shell scripts from Github setup folder (https://github.com/fastai/courses/tree/master/setup), Windows automatically adds CRLF line terminators! Therefore, in cygwin, run the following commands to remove these line endings:

  1. apt-cyg install dos2unix
  2. dos2unix setup_p2.sh
  3. dos2unix setup_instance.sh
  4. then finally, bash setup_p2.sh

This should do the trick.

like image 35
Ryan Chase Avatar answered Nov 11 '22 12:11

Ryan Chase