Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Changing directory in Google colab (breaking out of the python interpreter)

So I'm trying to git clone and cd into that directory using Google collab - but I cant cd into it. What am I doing wrong?

!rm -rf SwitchFrequencyAnalysis && git clone https://github.com/ACECentre/SwitchFrequencyAnalysis.git

!cd SwitchFrequencyAnalysis

!ls datalab/ SwitchFrequencyAnalysis/

You would expect it to output the directory contents of SwitchFrequencyAnalysis - but instead its the root. I'm feeling I'm missing something obvious - Is it something to do with being within the python interpreter? (where is the documentation??)

Demo here.

like image 550
willwade Avatar asked Jan 17 '18 09:01

willwade


2 Answers

use

%cd SwitchFrequencyAnalysis

to change the current working directory for the notebook environment (and not just the subshell that runs your ! command).

you can confirm it worked with the pwd command like this:

!pwd

further information about jupyter / ipython magics: http://ipython.readthedocs.io/en/stable/interactive/magics.html#magic-cd

like image 114
Fabian Linzberger Avatar answered Sep 20 '22 14:09

Fabian Linzberger


As others have pointed out, the cd command needs to start with a percentage sign:

%cd SwitchFrequencyAnalysis 

Difference between % and !

Google Colab seems to inherit these syntaxes from Jupyter (which inherits them from IPython). Jake VanderPlas explains this IPython behaviour here. You can see the excerpt below.

If you play with IPython's shell commands for a while, you might notice that you cannot use !cd to navigate the filesystem:

In [11]: !pwd  /home/jake/projects/myproject  In [12]: !cd ..  In [13]: !pwd  /home/jake/projects/myproject  

The reason is that shell commands in the notebook are executed in a temporary subshell. If you'd like to change the working directory in a more enduring way, you can use the %cd magic command:

In [14]: %cd .. /home/jake/projects 

Another way to look at this: you need % because changing directory is relevant to the environment of the current notebook but not to the entire server runtime.

In general, use ! if the command is one that's okay to run in a separate shell. Use % if the command needs to be run on the specific notebook.

like image 24
Simon Seo Avatar answered Sep 19 '22 14:09

Simon Seo