如何为Python shell添加制表符补全?

141

使用python manage.py shell启动Django应用程序时,我会得到一个InteractiveConsole shell - 我可以使用Tab键完成等操作。

Python 2.5.1 (r251:54863, Apr 15 2008, 22:57:26) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)

当使用python启动python解释器时,它不提供tab键自动补全功能。

能否有人告诉我django是如何为我提供交互式控制台的,或者我需要做什么才能在没有django应用程序的情况下启动交互式控制台?


1
当你在Python中输入时,会得到一个>>>提示,对吧?那就是交互式Shell。你有什么问题? - S.Lott
5
它不提供Tab自动完成功能,这就是问题所在。 - ashchristopher
请更新您的问题以进行具体说明。 - Daryl Spitzer
9个回答

233
我可能找到了一种方法。 创建一个名为.pythonrc的文件。
# ~/.pythonrc
# enable syntax completion
try:
    import readline
except ImportError:
    print("Module readline not available.")
else:
    import rlcompleter
    readline.parse_and_bind("tab: complete")

然后在你的 .bashrc 文件中添加以下内容:

export PYTHONSTARTUP=~/.pythonrc

看起来这样可以工作。


2
这适用于Jython,而IPython和bpython目前不可用。 - Skylar Saveland
1
由于某种原因,上述方法在我的旧版Mac(“Mountain Lion”)上有效,但在新版Mac(“El Capitan”)上无效。我需要每次在启动Python解释器之前运行“source ~/.bashrc”才能使其正常工作。有什么建议吗? - hi15
1
@hmi 请尝试按照此页面底部建议,统一您的.bashrc.bash_profile文件。该页面还提供了它们之间的区别信息。这可能无法解决问题,但可能会有所帮助。 - Dangercrow
@hmi 尝试放在 /etc/bashrc 中,而不是 ~/.bashrc - voices
仅供参考 - 我可能比在StackOverflow上的任何其他答案都更多次地回到了这个答案,所以谢谢。 - timmins

35

27

8
链接回答不受鼓励,请扩展您的回答 - Chris_Rands

14

我使用 ptpython - 它是一个很棒的自动完成shell命令的工具。

安装ptpython非常简单,使用pip工具即可。

pip install ptpython

对于django shell,您应该像这样导入django env:

import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "testweb.settings")

相信我,这是最适合你的方式!!!


8

修复 Windows 10 shell 的方法:

pip install pyreadline3  # previously, pyreadline but that package was abandoned
pip install ipython

3

看起来Python3已经内置了这个功能!


1
在Python3中,此功能默认启用。我的系统没有安装readline模块。我使用的是Manjaro。我在其他Linux发行版(elementary、ubuntu、mint)上没有遇到这个制表符完成问题。
在安装了pip模块后,导入时会抛出以下错误- ImportError: libncursesw.so.5: 无法打开共享对象文件: 没有那个文件或目录 为了解决这个问题,我运行了以下命令- cd /usr/lib ln -s libncursesw.so libncursesw.so.5 这解决了导入错误。并且,它还带来了Python repl中的表格完成,而不需要创建/更改.pythonrc.bashrc

0

是的,它已经内置在3.6中了。

fernanr@gnuruwi ~ $ python3.6
Python 3.6.3 (default, Apr 10 2019, 14:37:36)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.
Display all 318 possibilities? (y or n)
os.CLD_CONTINUED             os.O_RDONLY                  os.ST_NOEXEC                 os.environ                   os.getpid(                   os.readlink(                 os.spawnvpe(
os.CLD_DUMPED                os.O_RDWR                    os.ST_NOSUID                 os.environb                  os.getppid(                  os.readv(                    os.st

1
嗨,你按了哪个键才能得到“显示所有318种可能性?(y或n)”。我尝试了“tab”键,但它没有给出你的自动完成提示。我一定是漏掉了什么简单的东西。 - James H
是的,请告诉我它是如何获得自动完成的,需要按哪个键或进行任何设置,我很想知道! - jdk

-2

对于旧版本(2.x)以上的脚本非常有效 :)

fernanr@crsatx4 ~ $ cat .bashrc | grep -i python
#Tab completion for python shell
export PYTHONSTARTUP=~/.pythonrc
fernanr@crsatx4 ~ $ . ~/.bashrc
fernanr@crsatx4 ~ $ echo $?
0
fernanr@crsatx4 ~ $ python2
Python 2.7.5 (default, Jun 11 2019, 14:33:56)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.
Display all 249 possibilities? (y or n)
os.EX_CANTCREAT             os.O_WRONLY                 

你的回复似乎缺少了“~ / .pythonrc”文件的内容。 - MadMike
@MadMike 我怀疑它是打算显示在 ashchristopher 的回答 下面的...不过我不确定为什么它是一个回答。 - SamB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接