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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
|