你好,我是坚持分享干货的 EarlGrey,翻译出版过《Python编程无师自通》、《Python并行计算手册》等技术书籍。
如果我的分享对你有帮助,请关注我,一起向上进击。
作者:Yunfeng Wang,出处:https://vra.github.io/
1. 概述
在使用 Python 命令或者 Python 的命令行工具的时候,一个痛点是没有补全。比如python -m
后面输入包名字,就没有提示,每次想运行一个 http server 的时候,都需要搜索一下 http 服务的包名。另外,像 pip,pipx 等命令也没有提示,使用不太方便。
偶然看到 argcomplete 这个库,按 tab 键就可以给 Python 的命令行添加自动补全,简直是使用 Python 的一个神器。
具体来说,argcomplete 有下面的特点
官方支持 bash 和 zsh 两种 shell,对 tcsh 和 fish 有第三方贡献者提供的支持(不好意思 Windows 用户这里又被当做二等公民了 😂)
可以对 python 命令和 pip 命令进行补全
其他任何以 argparse 解析的第三方包的命令都可以用自动补全,添加 argcomplete 的几行代码就行
下面具体展开怎么对已有的工具启用自动补全,以及如何让自己的 Python 包支持 argcomplete。
2. 对 Python 和 pip 启用自动补全
首先通过pip
命令来安装 argcomplete:
pip install argcomplete
然后执行下面的语句来启用对 Python 和 pip 的自动补全:
activate-global-python-argcomplete
重启 Shell,试试输入pip
然后按 tab,发现就会列出所有的命令选项。
3. 如何对别的第三方库启用自动补全
有些库的命令行程序是已经支持 argcomplete 补全,只需要用下面的命令来激活:
eval "$(register-python-argcomplete <python-app-name>)"
例如 pipx 包安装后会在系统安装一个命令行程序 pipx,且 pipx 已经支持 argcomplete,我们就可以用下面的命令来激活自动补全:
eval "$(register-python-argcomplete pipx)"
激活后输入pipx in
按 tab 键,就可以列出 pipx 所有以in
开头的命令,再按 tab 键会在各个候选命令之间切换。
⚠️ 注意:这个激活命令是只对哪些代码中已经支持了 argcomplete 语句的程序才生效,如果代码中无这些语句,那是不生效的。
4. 如何让自己的 Python 库支持自动补全
只需要增加下面几行代码,就能让你的库的命令行支持自动补全:
# 在ArgumentParser对象初始化前增加这两行
# PYTHON_ARGCOMPLETE_OK
import argcomplete, argparse
# 原有代码
parser = argparse.ArgumentParser()
...
# 在调用parse_args()函数前增加这一行
argcomplete.autocomplete(parser)
# 原有代码
args = parser.parse_args()
...
然后你的包安装后,对应的命令行程序就可以用eval "$(register-python-argcomplete <app-name>)"
来补全了。
⚠️ 注意:如果程序执行到argcomplete.autocomplete()
被调用的地方耗时很久的话,用户按 tab 就会有明显的延迟感。所以尽量将一些比较耗时的操作放在argcomplete.autocomplete()
语句后面,比如一些import
语句,常常比较耗时,可以往后放。
希望这个程序能让你的 Python 开发变得舒服一些。
如果大家想进一步了解学习更多 Python 库,可以考虑关注下这个专栏哦。

- EOF -
文章已经看到这了,别忘了在右下角点个“赞”和“在看”鼓励哦~
推荐阅读 点击标题可跳转
回复下方「关键词」,获取优质资源
回复关键词「 pybook03」,领取进击的Grey与小伙伴一起翻译的《Think Python 2e》电子版
回复关键词「书单02」,领取进击的Grey整理的 10 本 Python 入门书的电子版
👇关注我的公众号👇
告诉你更多细节干货
欢迎围观我的朋友圈
👆每天更新所想所悟