I've noticed that recent versions of IPython seem to work tolerably well in virtualenv without any fiddling.  It detects the virtualenv and responds appropriately.  There is the annoying warning that "IPython is working out of a virtualenv and if you see problems then install it", but I never had problems.   The solution below is certainly good to have as a reference, but it might be worth mentioning that the slightly complicated setup might not be required in all cases.