ipython/ipython — pull request #937 by minrk (2011-10-28 01:12:39+00:00)
Title: add dirty trick for readline import on OSX

also made the libedit warning extremely loud, so people don't miss it.

We still get reports of people never having noticed the warning, and getting confused when readline is broken on OSX.

The libedit test is also simplified to just check `libedit in readline.__doc__`, which the official Python docs recommend, rather than the elaborate subprocess/otool method that was not especially reliable.

## The reason for the dirty trick

pip installs to site-packages by default, but site-packages dirs always come *after* lib-dynload (and extras, etc.), which is where the system readline is installed.

That means that a non-setuptools install (pip or setup.py install) *cannot* override any package that ships with OSX, including:

* numpy
* readline
* twisted
* pyobjc

without installing to a non-standard path (not even user site-packages via `--user`).

Note that this path issue not unique to OSX - lib-dynload, and patform packages always come before site-packages, including `--user`. It's just that OSX seems to be the only platform where there's anything in those locations that you would actually want to supplant.

## The method for the dirty trick

1. remove lib-dynload from sys.path before trying to import readline the first time
2. after import, restore lib-dynload to its place in sys.path
3. if import failed without lib-dynload, try it one more time, to get the default module

## This doesn't solve everything

It has also come to my attention that EPD and Fink Pythons *both* ship with broken readline (logical for EPD, given readline's license). However, neither of these report as being anything other than GNU readline, so we can't detect that they are broken.

It's possible that we *could* print a warning if we detect that we are in EPD and we get to step 3 without readline, but if EPD's readline ever does work, then that message would be misleading, and we would have no real way to know that the issue has been fixed.

The answer remains, in all cases (except for possibly Python.org Python and macports, only because they are untested), that the first command OSX Python users should ever do is `easy_install readline`. Not just the System Python. After this merge, pip *does* work to override readline in IPython, but not anywhere else in your Python world, so the warning message does note that pip install will likely not work, even though it does within IPython.