python argcomplete的缓存包装
cachedcomplete的Python项目详细描述
缓存完成
python argcomplete的缓存包装。在
安装
使用包管理器pip安装cachedcomplete。在
pip install cachedcomplete activate-global-python-argcomplete
解释
cachedcomplete包装了argcomplete,并允许缓存其解析器 为了节省时间。在
cachedcomplete每次更改自身时都会重新缓存, 或者在用户指定的文件中。在
cachedcomplete使用pickle缓存解析器,这意味着解析器 必须能够使用pickle序列化和反序列化。在
如果没有任何干扰,则无法使用pickle序列化argparse的解析器,
因为默认类型是在解析器的__init__
函数中定义的。
cachedcomplete用可以pickle的相同类型替换默认类型
(只有当cachedcomplete检测到默认类型仍然是默认类型时,才会执行此操作
识别功能)。在
使用
正常使用
正常用法与argcomplete中相同,只是将导入从argcomplete更改为cachedcomplete。在
注意:PYTHON_ARGCOMPLETE_OK
的用法与argcomplete中的用法相同
例如
使用argcomplete:
^{pr2}$使用cachedcomplete:
# PYTHON_ARGCOMPLETE_OKimportcachedcomplete# ...cachedcomplete.autocomplete()
CompletionFinder的自定义子类的用法
为了在cachedcomplete中使用自定义CompletionFinders, 需要使用decorator缓存的“完成”查找器。在
例如
使用argcomplete:
importargcompleteclassCustomCompletionFinder(argcomplete.CompletionFinder):# ...completion_finder=CustomCompletionFinder()# Instead of argcomplete.autocomplete()completion_finder()
使用cachedcomplete:
importargcompleteimportcachedcomplete@cachedcomplete.cached_completion_finderclassCustomCompletionFinder(argcomplete.CompletionFinder):# ...completion_finder=CustomCompletionFinder()# Instead of argcomplete.autocomplete()completion_finder()
或:
importargcompleteimportcachedcompleteclassCustomCompletionFinder(argcomplete.CompletionFinder):# ...completion_finder=cachedcomplete.cached_completion_finder(CustomCompletionFinder)()# Instead of argcomplete.autocomplete()completion_finder()
指定要跟踪的文件
为了指定跟踪更改的文件, 使用所需文件和前缀CACHEDCOMPLETE\u HASH添加注释:
# CACHEDCOMPLETE_HASH: file1.py
它还允许将多个文件拆分为多个注释,或在一个注释内拆分。在
# CACHEDCOMPLETE_HASH: file1.py file2.json# CACHEDCOMPLETE_HASH: file3.py# CACHEDCOMPLETE_HASH: "file with spaces.txt"
还允许向上传递一个目录来跟踪其中的所有文件
# CACHEDCOMPLETE_HASH: dir
还允许使用环境变量和用户目录:
# CACHEDCOMPLETE_HASH: $HOME/.cache/my-cache /tmp/${USERNAME}.ini# CACHEDCOMPLETE_HASH: ~/.cache/my-cache ~gdm/greeter-dconf-defaults
路径相对于调用脚本,而不是当前工作目录。在
cachedcomplete添加一个环境变量名pwd
,以允许访问当前
注释中的工作目录。如果已经设置了此变量,则not覆盖。在
# CACHEDCOMPLETE_HASH: $pwd/local-file
使用自定义类型、完成符、操作等…
为了缓存使用自定义类型和函数的解析器, 它们必须在主脚本(定义解析器)之外的单独模块中定义。在
注意:建议将这些单独的模块添加到跟踪文件中(如CACHEDCOMPLETE_HASH
指定的那样)。
示例:
不起作用:
在my_awesome_script.py
# PYTHON_ARGCOMPLETE_OKimportargparseimportcachedcompleteimportjsondefjson_file(arg):withargparse.FileType()(arg)asf:returnjson.load(f)p=argparse.ArgumentParser()p.add_argument('settings',type=json_file)cachedcomplete.autocomplete(p)
将工作:
在my_awesome_type.py
importjsondefjson_file(arg):withargparse.FileType()(arg)asf:returnjson.load(f)
在my_awesome_script.py
# PYTHON_ARGCOMPLETE_OK# CACHEDCOMPLETE_HASH: my_awesome_type.pyimportargparseimportcachedcompletep=argparse.ArgumentParser()p.add_argument('settings',type=json_file)cachedcomplete.autocomplete(p)
- 项目
标签: