- Published on
IPython with 'project-style' directories
- Authors
- Name
- Martin Andrews
- @mdda123
IPython notebook is a very nice experimentation platform, however it seems to be a little unintuitive to use when using as part of a larger 'non-experimental' codebase. The following shows how a couple of directory tweaks can be made without altering any IPython configuration files.
If there's a better way to do this, please let me know. This feels like a hack.
Subdirectory model desired
When coding up a larger project, it's helpful to have everything in the familiar directory structure :
./ # {BASE DIRECTORY}
./src/*.py
./src/Module1/__init__.py # ...(etc)
./src/Module2/__init__.py # ...(etc)
./data/*.csv
./notebooks/*.ipynb
And standard scripts (for instance src/xyz.py
) can be run in {BASE}
by simply :
python src/xyz.py
Such scripts can import the internal modules straightforwardly (eg: import Module1
), and the base directory for accessing the data will be data/
.
At the same time, the IPython notebooks are kept in a separate notebooks/
directory, which is what messes up all the paths.
IPython notebook preamble
Open up a new IPython notebook in notebooks/
, and have the following cell at the start to pull in the modules, and data with the correct relative paths :
%pushd
%cd ../src
import Module1
%cd ..
p = Module1.Obj('Something', 'datafile', 17)
%popd
Running matplotlib thereafter :
%matplotlib inline
import matplotlib.pyplot as plt
plt.rcParams['figure.figsize'] = (16.0, 8.0)
import numpy as np