Ipython жалуется на readline

Когда я устанавливаю ipython в свой osx и запускаю его, я получаю следующее предупреждение:

 /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/
 site-packages/IPython/utils/rlineimpl.py:96:
 RuntimeWarning: Leopard libedit detected - readline will not be wel
 behaved including some crashes on tab completion, and incorrect
 history navigation. It is highly recommended that you install
 readline, which is easy_installable with: 'easy_install readline'

Я установил readline и не использую системный python, который изначально был установлен в /Library/Frameworks/Python.framework/Versions/2.7/bin/python$. /usr/bin/python указывает на версию 2.7, как показано ниже

uname -a
Darwin macbook.local 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun  7 
16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386 i386

$sudo pip install readline ipython

$ipython --version
0.11

$/usr/bin/python --version # 
Python 2.7.1 

$which python
/Library/Frameworks/Python.framework/Versions/2.7/bin/python

Я прочитал вопрос в не удалось изменить версию sys.path Python - я добавил /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/readline-6.2.1-py2.7.egg-info в /Library/Frameworks/Python.framework/Versions/2.7/bin/ipython, чтобы теперь он выглядел следующим образом: http://pastebin.com/raw.php?i=dVnxufbS

но я не могу понять, почему я получаю следующую ошибку:

File
"/Library/Frameworks/Python.framework/Versions/2.7/bin/ipython",
line 9
sys.path.insert(0,"/Library/Frameworks/Python.framework/Versions/2.7/lib/
python2.7/site-packages/readline-6.2.1-py2.7.egg-info")

Я не думаю, что вышеуказанный путь является проблемой, и моя цель - заставить ipython работать, не жалуясь на чтение, даже если он установлен и импортируется правильно.

Ответ 1

Когда pip устанавливает readline, он никогда не будет импортироваться, потому что readline.so идет в site-packages, который заканчивается за системной версией libedit System, расположенной в lib-dynload (порядок пути по протоколу OSX Python очень нечетный). easy_install -a readline фактически установит полезную readline.

Итак, вы можете либо использовать easy_install, либо использовать pip и muck с вашим PYTHONPATH/sys.path(что по сути означает: НЕ ИСПОЛЬЗУЙТЕ PIP).

Немного подробней о списке IPython (хотя в этом нет ничего особенного в IPython): http://mail.scipy.org/pipermail/ipython-user/2011-September/008426.html

EDIT: дополнительная заметка о virtualenv.

Есть ошибка в virtualenv < 1.8.3, где readline не будет правильно организован при создании env.

Ответ 2

Если вы не возражаете против того, чтобы с помощью PYTHONPATH, вот как вы можете избавиться от этого досадного предупреждения:

# move site-packages to the front of your sys.path
import sys
for i in range(len(sys.path)):
    if sys.path[i].endswith('site-packages'):
        path = sys.path.pop(i)
        sys.path.insert(0, path)
        break

Если вы используете Django, вы можете поместить это в метод ipython ваших сайтов-пакетов/django/core/management/commands/shell.py, чтобы он запускался при запуске ./manage.py shell.

Ответ 3

Дополнительное примечание для будущих читателей этого ответа.

В моем случае - запуск MacPorts для установки IPython - в/opt/local/bin/было несколько версий easy_install, но не содержала неинициализированную символическую ссылку, указывающую на самый текущий. Выполняется easy_install-2.7 -a readline.