What is setuptool's alternative to (the deprecated) distutils `strtobool`?

310 views Asked by At

I am migrating to Python 3.12, and finally have to remove the last distutils dependency.

I am using from distutils.util import strtobool to enforce that command-line arguments via argparse are in fact bool, properly taking care of NaN vs. False vs. True, like so:

arg_parser = argparse.ArgumentParser()
arg_parser.add_argument("-r", "--rebuild_all", type=lambda x: bool(strtobool(x)), default=True)

So this question is actually twofold:

  • What would be an alternative to the deprecated strtobool?
  • Alternatively: What would be an even better solution to enforce 'any string' to be interpreted as bool, in a safe way (e.g., to parse args)?
2

There are 2 answers

5
larsks On BEST ANSWER

What about using argparse's BooleanOptionalAction? This is documented in the argparse docs, but not in a way that provides me with a useful link.

That would look like:

arg_parser = argparse.ArgumentParser()
arg_parser.add_argument("-r", "--rebuild-all", action=argparse.BooleanOptionalAction, default=True)

And it would allow you to pass either --rebuild-all or --no-rebuild-all. This gets you an option that can be either true or false, but without the hassle of having to parse a string into a boolean value.

1
Talha Tayyab On

You can check this alternative:

$ pip install str2bool

https://github.com/symonsoft/str2bool

Convert string to boolean. Library recognizes "yes", "true", "y", "t", "1" as True, and "no", "false", "n", "f", "0" as False. Case insensitive.