Argparse action to define CLI version with a delayed call to importlib.metadata
Project description
importlib-metadata-argparse-version
Python's argparse
module action to define CLI version with a delayed
call to importlib.metadata.version
only when --version
argument
is passed.
Rationale
When you use importlib.metadata
for adding the version to a CLI utility,
you need to import importlib.metadata
and call
importlib.metadata.version("<your-package>")
at initialization time.
If you only want to execute other parts of the CLI
(eg. like passing the option --help
), importlib.metadata
will be
imported too even when is not needed at all.
The problem is easily fixed by this module.
Usage
import argparse
from importlib_metadata_argparse_version import ImportlibMetadataVersionAction
parser = argparse.ArgumentParser()
parser.add_argument(
"-v", "--version",
action=ImportlibMetadataVersionAction,
version_from="your-package-name",
)
This is a rough equivalent to something like:
import argparse
import importlib.metadata
parser = argparse.ArgumentParser()
parser.add_argument(
"-v", "--version",
action="version",
version=importlib_metadata.version("your-package-name"),
)
...but with the difference that importlib.metadata
will only be
imported when you call --version
, so it is more efficient.
When using ImportlibMetadataVersionAction
the version
kwarg
accepts %(version)s
as a placeholder like %(prog)s
. So you
can write something like this to display the program name before the
version:
parser.add_argument(
"-v", "--version",
action=ImportlibMetadataVersionAction,
version_from="your-package-name",
version="%(prog)s %(version)s",
)
# or
parser.version = "%(prog)s %(version)s"
parser.add_argument(
"-v", "--version",
action=ImportlibMetadataVersionAction,
version_from="your-package-name",
)
And the version
kwarg becomes optional, being "%(version)s"
the default value.
Infer package name
The argument version_from
can be ommitted and the package name
will be inferred from the caller package location:
parser.add_argument(
"-v", "--version",
action=ImportlibMetadataVersionAction,
)
For convenience
If you forget to define the kwarg version_from
in the argument or the
inferred package name is not found, an exception will be raised at
initialization time. Python's argparse
built-in "version"
action raises
an AttributeError
only when you call your program with --version
, which
is unsafe because could lead you to forget to define the version
passing
the error unnoticed until you test it manually.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file importlib_metadata_argparse_version-3.0.0.tar.gz
.
File metadata
- Download URL: importlib_metadata_argparse_version-3.0.0.tar.gz
- Upload date:
- Size: 5.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d75ead959c6ddf8b61f2967f7dcdf6f8171f67541bd40edf56db0e8aa8b562c7 |
|
MD5 | c626596ddee5e8d78e29d8a316e76ff0 |
|
BLAKE2b-256 | 2fde69cd270f0b22bd85799f6383afbd4c44ce04ed66c2bcc8f58d0509c3a89e |
File details
Details for the file importlib_metadata_argparse_version-3.0.0-py3-none-any.whl
.
File metadata
- Download URL: importlib_metadata_argparse_version-3.0.0-py3-none-any.whl
- Upload date:
- Size: 5.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 364895f73c7b5bc3435cefa0789bf629d63ca3e43f7d28609c06e544fd7bf302 |
|
MD5 | c096fe067e1b5906dfb2a5db751f556b |
|
BLAKE2b-256 | 36f087b2f5bbfea81746b89ea2a403d46a8b9ea5eb38fef6dae6d8a7ea2cdf56 |