用于将monkeypatches应用于python可执行文件的工具。
pymonke的Python项目详细描述
猴子
用于将monkeypatches应用于python可执行文件的工具。
安装
pip install pymonkey
注册修补程序
制作模块:
## mymod/pymonkey.py# Be sure to not import anything at the module scope# This ensures that import-hook patching will work better later# This is your chance to do argument parsing before running the target# executable.# This will be called after all of the patch hooks have been registered.defpymonkey_argparse(argv):# You'll be passed the arguments as a tuple. Parse your specific arguments# and return your parsed state and the remaining arguments.# If you wish to forgo argparsing, simply `return None, argv`importargparseparser=argparse.ArgumentParser()parser.add_argument('--foo')returnparser.parse_known_args(argv)# This is your entry point. It will be passed module objects after they have# been imported. Check the module name and then apply your patch (if# applicable).# This will be called as a post-import hook so you'll have a chance to modify# the module before another module would import from it.# The parsed state computed above will be passed as `args`defpymonkey_patch(mod,args):# This callback will be called with *every* module that gets imported# Guard against the specific module you'd like to patchifmod.__name__!='module_to_patch':return# Apply your patches here to module_to_patchmod.foo=args.foo
并将入口点添加到setup.py:
setup(...,entry_points={'pymonkey':['mymod = mymod.pymonkey:pymonkey_patch'],'pymonkey.argparse':['mymod = mymod.pymonkey:pymonkey_argparse'],},...)
命令行用法
应用单个修补程序:
$ pymonkey mymod -- pip install simplejson
应用所有可用的修补程序:
$ pymonkey --all -- pip install simplejson
查看帮助
$ pymonkey --help
使用pymonkey设置入口点
在模块中:
## mymod_main.pyfrompymonkeyimportmake_entry_point# The first argument is a list of pymonkey patches to apply# The second argument is the entry point to runmain=make_entry_point(('mymod',),'pip')if__name__=='__main__':exit(main())
在setup.py中
setup(...,entry_points={'console_scripts':['pip-patched = mymod_main:main'],'pymonkey':['mymod = mymod.pymonkey:pymonkey_patch'],'pymonkey.argparse':['mymod = mymod.pymonkey:pymonkey_argparse'],},...)
然后,而不是
$ pymonkey mymod -- pip ...
现在您可以执行
$ pip-patched ...