【问题标题】:`ipython` tab autocomplete does not work on imported module`ipython` 选项卡自动完成功能不适用于导入的模块
【发布时间】:2010-04-08 22:10:14
【问题描述】:

IPython 上的制表符补全似乎不起作用。例如,

import numpy
numpy.<tab>

只需添加一个选项卡。

import numpy
num<tab>

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

【问题讨论】:

  • 下面的解决方案对我有用 - 它对你有用吗?如果是这样,您应该将答案标记为已接受。
  • 下面没有对我有用的东西。拥有最新的 pyreadline。在 python 3.5 上运行 jupyter notebook。
  • 如果它正在工作,然后在您按下一些随机键后它停止工作,然后检查单元格类型是否意外从“代码”更改为其他内容,如“Markdown”或“Raw” NBC 转换”。
  • 如果你刚刚安装了一个新的 python 模块并且 ipython 不做导入自动完成,去here
  • jedi 从 0.17 升级到 0.18 是错误的,并且会禁用 IPython 选项卡完成。请参阅下面 2020 年 12 月的答案。

标签: python ipython tab-completion


【解决方案1】:

确保您已安装 pyreadline 库。它是制表符补全和其他 IPython 功能所必需的 - 在 Windows 中,它不附带 IPython 包,您必须单独安装它 -

> pip install pyreadline

【讨论】:

  • @joaquin 我尝试使用install gnureadline 为mac 安装它,但是当我执行numpy.&lt;tab&gt; 之类的操作时,我仍然无法完成制表符。你知道这是为什么吗?
  • @AlanH 对不起,不知道 MAC。也许您应该提出一个新的具体问题。
  • 仅供参考,如果它不能立即工作(对我来说就是这种情况),请启动新控制台。
  • 添加使用 Anaconda 或 Miniconda 来管理安装的建议。我刚刚安装了 ipython (conda install ipython) 并且没有选项卡完成问题。您可以与 pip 同时使用它。
  • 我认为这个答案已经过时了,因为 iPython 从 5.0 版开始就不再依赖 pyreadlines,而且 pyreadlines 自 2017 年以来就没有开发过——见ipython.org/pyreadline.html
【解决方案2】:

如果有人使用最近的7.19.0 并且自动完成功能不起作用,请尝试将jedi 降级为0.17.2

pip install jedi==0.17.2

详情请见https://github.com/ipython/ipython/issues/12740

【讨论】:

  • 这反映了截至 2021 年 1 月的现状。parso 软件包也需要降级到 0.7.1。
  • @Augusto 一开始它似乎对我有用。但是在第一个代码完成之后,它又以某种方式中断了。意思是,例如在输入加载的库名称和旁边的 DOT 后,当我点击 Tab 时,什么也没有发生,当它应该在下拉列表中列出该库中模块的选项时......
  • 我使用的是 Python 3.6.8/ipython 7.16.1,它对我有用。
  • 这用 Python 3.7.7/ipython 7.22 为我修复了两个。谢谢。
  • 这个变化(特别是parso的降级)为我修复了ptpythonipythonpip install parso==0.7.1的工作
【解决方案3】:
pip uninstall jedi --yes

pip install pyreadline

当前带有 Jupyter notebook 的 Ipython 不需要 jedi.. 所以你只需使用上面的命令卸载它。

我是从here 那里得到的。

【讨论】:

  • 这个解决方案对我有用。 Python 3.8.10,IPython 7.22.0,macOS。谢谢!
  • 这个解决方案在 2021 年对我有用。不知道没有绝地会有什么影响,或者它是如何首先影响我的系统的。
  • 我可以确认这对我有用。 Python 3.8.12,IPython 7.21.0,Ubuntu。
【解决方案4】:

您的 ipythonrc 文件可能已过期。 尝试运行

ipython -upgrade

【讨论】:

  • 不再支持-upgrade 标志。
【解决方案5】:

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

【讨论】:

    【解决方案6】:

    降级 iPython 成功了。

    pip install --upgrade ipython==5.8.0
    

    【讨论】:

      【解决方案7】:

      经典的“您是否尝试过将其关闭再打开”对我有用。

      pip uninstall ipython
      pip install ipython
      

      【讨论】:

        【解决方案8】:

        我遇到了这个问题。 我通过降级 python-parso 包解决了

        降级 python-parso 包 (0.8.0-1 => 0.6.2-1)

        【讨论】:

        • 对我来说,从 0.8.0 降级到 0.7.1 可以解决问题
        【解决方案9】:

        这绝对应该像我的情况一样工作

        conda install ipython  
        pip install jedi==0.17.2
        

        【讨论】:

          【解决方案10】:

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

          easy_install ipython readline
          

          YMMV.

          【讨论】:

            【解决方案11】:

            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. 安装“官方”readline:easy_install readline
            2. 发现它在哪里。查看 /Library/Python/site-packages/readline-*.egg 或您的 Virtualenv 对应项
            3. 发现 ipython bin 在哪里:which ipython
            4. 在此文件中添加一行,在 import sys 行之后添加 readline egg 路径。

            我的 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')()
                )
            

            【讨论】:

              【解决方案12】:

              我意识到这是一个非常老的问题,但上面的答案都没有对我有用(这是你在谷歌上搜索这种性质的问题时得到的第一个结果)。

              我应该提一下,这不是 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 软件包,当需要链接它们并构建鸡蛋时,您的安装将会失败。希望这对其他人有帮助!

              【讨论】:

                【解决方案13】:

                我遇到了这个问题,并且知道我已经为我正在寻找的模块安装了 pip。执行$ ipython --init 为我解决了这个问题。

                【讨论】:

                  【解决方案14】:

                  就我而言,我必须mv ~/.ipython{,.bak}

                  【讨论】:

                    【解决方案15】:

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

                    def myfunction():
                        import pandas as pd
                        import numpy as np
                    
                        a = pd.DataFrame(np.random.normal(1,3, (4,4))
                        return a
                    

                    【讨论】:

                      【解决方案16】:

                      我在使用 numpy 库时遇到了同样的问题。问题出在 ipython 或 jupyter notebook 的特定版本上,只需更新 ipython 或 jupyter 即可解决。 如果您正在使用像 anaconda 或 miniconda 这样的 conda 环境,那么在该环境中使用更新 ipython

                      conda update ipython
                      

                      如果是 anaconda,您还需要更新 q​​tconsole

                      conda update qtconsole
                      

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

                      conda update -all
                      

                      如果你没有使用环境,那么直接使用 pip 更新

                      pip update ipython
                      

                      【讨论】:

                        【解决方案17】:

                        我通过安装 jedi-language-server 解决了我的问题:

                        pip install -U jedi-language-server
                        

                        PS,我是在虚拟环境中从 Conda 安装 Ipython,并在激活环境时使用上述命令。

                        【讨论】:

                          【解决方案18】:

                          要检查 ipython 和它使用的模块是否匹配,请运行 pip check ipython
                          对于我在 2021 年 7 月使用 ipython 7.25 的配置,这给出了一个很好的明确警告:

                          ipykernel 6.0.1 需要 importlib-metadata

                          您当然可能会看到不同的警告 -- 这只是一个示例,与选项卡完成无关。

                          然后降级它,例如 pip install 'importlib-metadata&lt;4' # 不要忘记'引号'

                          成功卸载 importlib-metadata-4.6.0
                          成功安装 importlib-metadata-3.10.1


                          也很有用:
                          • pip list -- $PYTHONPATH 中的所有内容,包括版本和位置
                          • pip check -- 一切
                          • pip show ipython--

                          需要:traitlets、pygments、jedi、decorator、pickleshare、pexpect、appnope、matplotlib-inline、setuptools、prompt-toolkit、backcall

                          但要查看所需的版本,您必须查看 .../site-packages/ipython-*.dist-info/METADATA

                          【讨论】:

                            【解决方案19】:

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

                            【讨论】:

                              猜你喜欢
                              • 1970-01-01
                              • 2012-02-27
                              • 1970-01-01
                              • 2010-12-05
                              • 2012-01-24
                              • 1970-01-01
                              • 1970-01-01
                              • 2020-03-02
                              • 2014-12-04
                              相关资源
                              最近更新 更多