Minydra: a simple versatile Python command-line parser
Parse anything
Some argument parsers focus on security, others on automating help or on holding your hand, catching you when you fall before you hit the ground.
Minydra is about freedom.
You can use it to parse arbitrary command-line arguments, it will accept any value, it will handle int
float
bool
lists
, dicts
and dotted notations to specify nested keys.
Freedom has a price: Minydra will most often not break, especially not on typos. You might go crazy because of it. Just be aware of that.
pip install minydra
MinyDict: enjoy dicts and dotted notations
Minydra’s Parser
parses the arguments the script receives into its parser.args
argument. This is a custom class built upon Python’s dict
to enjoy dotted notations, auto-resolving dotted keys, with a pretty_print()
method. Everything else’s just a dict so you can use them as usual. It is not as advanced and versatile as dedicated libraries like addict
or bunch
but it’s lightweight and without dependency.
Using it in Machine Learning
I work on a large, shared project with large and nested configurations: hundreds of possible command-line overwrites from the default parameters.
Before Facebook’s Hydra shifted away from strict=False
, I used it to handle arbitrary changes to a configuration. Now instead of being stuck with hydra-core==0.11.3
and omegaconf==1.4.1
I decided to build my own lightweight tool.
Hydra’s great to mix hierarchical configuration, run hyper-parameter searches and store everything in a specific structure. If you want to bind the arguments in your command-line to a configuration file as a safety net to make your interface more robust I suggest you use Hydra instead.
Minydra’s spirit is to let you do whatever you want. You just need to want what’s good for you :)
In my case this means I have a default config and I run jobs using slurm
. So running experiments means writing a job-script. Every single time. Which I do with Python: a yaml
config specifies overrides to the defaults which are passed as command-line arguments to the job.