]> xn--ix-yja.es Git - alex.git/commitdiff
Initial add of /programming/python/creating_nice_python_cli_tools
authoralex <alex@pdp7.net>
Fri, 22 Apr 2022 18:39:00 +0000 (20:39 +0200)
committeralex <alex@pdp7.net>
Fri, 22 Apr 2022 18:39:00 +0000 (20:39 +0200)
programming/python/creating_nice_python_cli_tools.md [new file with mode: 0644]

diff --git a/programming/python/creating_nice_python_cli_tools.md b/programming/python/creating_nice_python_cli_tools.md
new file mode 100644 (file)
index 0000000..b1ec010
--- /dev/null
@@ -0,0 +1,22 @@
+* Use [my suggestions for setting up Python projects](project_setup), particularly:
+  * Provide instructions for installing your tool using [pipx](https://github.com/pypa/pipx).
+    Using pipx, people can install and upgrade your script using a simple command that requires no administrative privileges (but it requires having Python and pipx installed).
+  * As you are using [poetry](https://python-poetry.org/), following the indications above:
+    * Use [Poetry's support for specifying scripts](https://python-poetry.org/docs/pyproject/#scripts), so when installing your tool via pipx or other means, your scripts are added to the user's path.
+    * Dependencies you define will be installed automatically along with your application.
+      As you are using pipx, those dependencies will be installed to a isolated virtualenv, so they will not interfere with anything on your system.
+* If your application requires secrets, such as credentials or others, consider using:
+  * The standard [getpass](https://docs.python.org/3/library/getpass.html) module.
+    This prompts for a string on the command line, hiding what the user types.
+  * The [keyring](https://pypi.org/project/keyring/) library.
+    This stores secrets using your operating system facilities.
+* Use the [appdirs](https://pypi.org/project/appdirs/) library to obtain "user paths", such as the users directory for configuration, cache, or data.
+  appdirs knows the proper paths for Linux, macOS and Windows.
+  So for example, if your tool caches files and uses appdirs to find the cache directory, you might gain benefits such as cache files being excluded from backups.
+* Use the [tqdm](https://tqdm.github.io/) library to add a progress bar if your tool requires significant time to complete a process.
+* Although you can use other fancier tools for parsing command-line arguments, the standard [argparse](https://docs.python.org/3/library/argparse.html) module is good enough for most tools.
+  It has decent support for [sub-commands](https://docs.python.org/3/library/argparse.html#sub-commands), and the linked document describes a very nice pattern to define functions for sub-commands, under "One particularly effective way of handling sub-commands..."
+* Remember that the standard [json](https://docs.python.org/3/library/json.html) module is built-in.
+  You can use it to add a mode to your tool that generates JSON output instead of human-readable output, for easy automation of your tool, maybe using [jq](https://stedolan.github.io/jq/) or [fx](https://github.com/antonmedv/fx).
+
+You can find examples for many of those techniques in my [repos](https://github.com/alexpdp7?tab=repositories&q=&type=&language=python&sort=).