`ipython`选项卡的自动完成功能不适用于导入的模块


79

IPython上的制表符补全似乎无法正常工作。例如,

import numpy
numpy.<tab>

只需添加一个标签即可。

import numpy
num<tab>

也只添加了一个标签。您能否提出这个问题的一些可能原因?我正在运行Windows 7和Python 2.6.5。


1
以下解决方案对我有用-对您有用吗?如果是这样,您应将答案标记为已接受。
bacar 2011年

下面对我没有任何帮助。拥有最新的pyreadline。在python 3.5上运行jupyter笔记本。
Michael Szczepaniak

如果它正在工作,然后在按了一些随机键后又停止工作,则检查单元格的类型是否意外地从“代码”更改为其他内容,例如“ Markdown”或“ Raw NBConvert”。
索林·波斯特尔尼库

如果你刚刚安装了一个新的Python模块和IPython都没有做进口自动完成,走在这里
特雷弗·博伊德·史密斯

Answers:


93

确保已安装pyreadline库。制表符完成和其他IPython功能需要使用它-在Windows中,它不是IPython软件包随附的,您必须单独安装-

> pip install pyreadline

1
@joaquin我尝试使用mac进行安装install gnureadline,但是当我执行类似操作时,我仍然无法获得制表符的完成numpy.<tab>。你知道为什么吗
TheRealFakeNews

@AlanH抱歉,不知道MAC。也许您应该打开一个新的特定问题。
joaquin

1
仅供参考,如果它不能立即运行(对我来说就是这种情况),请启动新控制台。
Alby

2
添加了使用Anaconda或Miniconda来管理安装的建议。我刚刚安装了ipython(conda install ipython),并且没有制表符完成问题。您可以将其与pip同时使用。
肯尼

我认为这个答案已经过时了,因为iPython从5.0版开始就不再依赖pyreadlines,而且pyreadlines自2017年以来就没有开发过–请参阅ipython.org/pyreadline.html
Olsgaard

7

您的ipythonrc文件可能已过期。尝试跑步

ipython -upgrade

9
-upgrade标志不再受支持。
jsmedmar'2

6

pip 告诉我我已安装pyreadline版本1.7.1

C:\Users\me>pip freeze | grep readline
pyreadline==1.7.1

升级pyreadline为我修复了它:

C:\Users\me>pip install --upgrade pyreadline

C:\Users\me>pip freeze | grep readline
pyreadline==2.0


2

降级iPython可以解决问题。

pip install --upgrade ipython==5.8.0

这对我有用。谢谢。
莎拉

1

截至目前,在OSX上,安装了pip的ipython无法提供制表符补全,pyreadline release.py已被破坏..什么是WFM:

easy_install ipython readline

YMMV。


1

StackOverflow中的其他人发布了此链接:http ://www.vankouteren.eu/blog/2009/06/getting-ipython-readline-and-auto-completion-to-work-on-mac-os-x/

easy_install readline从本质上讲,它不是发现readline egg的安装位置,然后编辑ipython bin脚本以使用此readline:

  1. 安装“官方”阅读热线: easy_install readline
  2. 发现它在哪里。查看/Library/Python/site-packages/readline-*.egg或与您的Virtualenv同行
  3. 发现ipython bin在哪里: which ipython
  4. 在此文件中添加import sys一行,在行后立即添加readline蛋路径。

我的virtualenved ipython bin脚本按如下方式工作:

#!/Users/alanjds/src/git/cervejeiras/venv/cervejeiras-lfs/bin/python
# EASY-INSTALL-ENTRY-SCRIPT: 'ipython==0.13.1','console_scripts','ipython'
__requires__ = 'ipython==0.13.1'
import sys

### ONLY LINE ADDED:
sys.path.insert(0, '/Users/alanjds/src/git/cervejeiras/venv/cervejeiras-lfs/lib/python2.6/site-packages/readline-6.2.4.1-py2.6-macosx-10.6-fat.egg')
####

from pkg_resources import load_entry_point

if __name__ == '__main__':
    sys.exit(
        load_entry_point('ipython==0.13.1', 'console_scripts', 'ipython')()
    )

1

我意识到这是一个非常老的问题,但是以上答案对我都不起作用(这是您在搜索具有这种性质的问题时获得的第一击)。

我应该提到这不是Windows独有的,我在运行CentOS 6.5和Python 2.7时遇到问题

这是我所做的:

apt-get/yum install ncurses-devel
#If you want history in iPython:
apt-get/yum install sqlite-devel
easy_install ipython readline
ipython

In [1]: from 
Display all 391 possibilities? (y or n)

如果您没有-devel软件包,则当需要链接它们并构建鸡蛋时,安装将失败。



0

Ipython需要Pyreadline。安装pyreadline。这是在Windows 7中完成的。获取pyreadline zip,pyreadline-master.zip和unzip。在powershell中将目录更改为zippedline,确保在Path中设置了python,然后输入命令python setup.py install这将在C:\ Python27 \ Lib \ site-packages中安装pyreadline


0

我遇到了这个问题,并且知道我已经为要查找的模块安装了pip。表演$ ipython --init为我解决了这个问题。



0

如果您使用Jupyter笔记本,但在尝试了本文中建议的所有步骤之后,仍然可以完成Tab自动完成功能,则可能需要检查是否要在函数定义中使用Tab自动完成功能。如果您的导入语句是以下功能的一部分,则不会获得Tab自动完成功能。您需要将import语句放在函数外部,并在要求对包进行自动完成之前执行一次。

def myfunction():
    import pandas as pd
    import numpy as np

    a = pd.DataFrame(np.random.normal(1,3, (4,4))
    return a

0

我在numpy库中遇到了同样的问题。问题出在特定版本的ipython或jupyter笔记本上,只需更新ipython或jupyter即可解决。如果您使用的是conda环境(例如anaconda或miniconda),请通过使用以下命令在该环境中更新ipython

conda update ipython

如果是水蟒,还需要更新qtconsole

conda update qtconsole

有时anaconda会限制ipython的更新,然后尝试

conda update -all

如果您使用的不是环境,请直接使用pip更新

pip update ipython
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.