don't hard require IPython