ipython抱怨readline

Tre*_*ewq 26 python

当我在我的osx上安装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'
Run Code Online (Sandbox Code Playgroud)

我已经安装了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
Run Code Online (Sandbox Code Playgroud)

我已经阅读了Python sys.path修改中无法正常工作的问题 - 我添加/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")
Run Code Online (Sandbox Code Playgroud)

我不认为上面的路径是一个问题,我的目标是让ipython工作而不会抱怨readline,即使它已经安装并正确导入.

min*_*nrk 41

当pip安装readline时,它永远不会被导入,因为readline.so进入了site-packages,最终位于libedit System one后面lib-dynload(OSX Python路径顺序很奇怪). easy_install -a readline将实际安装可用的readline.

所以你可以使用easy_install,或者使用pip和muck about你的PYTHONPATH/sys.path(这实际上意味着:不要使用PIP).

关于IPython列表的更多细节(虽然没有关于这个问题的特定IPython):http://mail.scipy.org/pipermail/ipython-user/2011-September/008426.html

编辑:关于virtualenv的额外说明.

virtualenv <1.8.3中存在一个错误,当您创建env时,readline将无法正确暂存.

  • 请注意这个答案的未来读者:如果你已经尝试过`pip install readline`并且不起作用,你实际上需要做`easy_install -a readline`.如果没有-a,看起来easy_install会意识到你已经有了一个pip安装的readline,而没有做任何事情.-a强制它进行完全重新安装. (28认同)
  • @minrk-谢谢.我发现了我的烦恼的原因; 当我正在轻松地安装`readline`时,我仍然在一个virtualenv中安装iPython(我通常这样做,只是为了将非必要的工具与我的全局Python安装隔离) - 当我停用我的virtualenv和pip安装的全球iPython时它工作了 (2认同)
  • readline的Python包已重命名为`gnureadline`,以避免名称与stdlib readline冲突.IPython> = 2.0依赖于OS X上的这个包,所以`pip install --upgrade ipython`将得到正确的readline,一切都应该开心. (2认同)