ipython 报错 readline
我在我的Mac上安装了ipython并运行时,收到了以下警告:
/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,并且不使用最开始安装在 /Library/Frameworks/Python.framework/Versions/2.7/bin/python$
的系统自带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
我看过一个问题,链接在这里:Python sys.path modification not working - 我把 /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正常工作,不要再抱怨readline,尽管它已经安装并且可以正常导入。
4 个回答
给未来阅读这个回答的朋友们补充一点说明。
在我的情况下——我是在使用MacPorts安装的IPython——在/opt/local/bin/目录下有好几个版本的easy_install
,但是没有一个指向最新版本的快捷方式。执行easy_install-2.7 -a readline
这个命令就成功了。
如果你不介意调整一下你的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
方法,路径是site-packages/django/core/management/commands/shell.py,这样当你运行./manage.py shell
的时候,它就会执行。
当你用pip安装readline时,它其实是不会被导入的,因为readline.so这个文件会放在site-packages文件夹里,而这个文件夹的位置在libedit系统文件的后面,后者在lib-dynload
里(OSX的Python路径顺序很奇怪)。使用easy_install -a readline
命令可以安装到可用的readline。
所以你可以选择用easy_install,或者用pip但要调整你的PYTHONPATH/sys.path(这基本上就是说:不要用pip)。
关于这个问题还有更多细节在IPython的邮件列表上(不过这个问题其实和IPython没有什么特别的关系):http://mail.scipy.org/pipermail/ipython-user/2011-September/008426.html
编辑:关于virtualenv的额外说明。
在virtualenv版本低于1.8.3时,有一个bug会导致在创建环境时readline没有正确安装。