René's URL Explorer Experiment


Title: Click and Python: Build Extensible and Composable CLI Apps – Real Python

Open Graph Title: Click and Python: Build Extensible and Composable CLI Apps – Real Python

Description: In this tutorial, you'll learn how to use the Click library to build robust, extensible, and user-friendly command-line interfaces (CLI) for your Python automation and tooling scripts.

Open Graph Description: In this tutorial, you'll learn how to use the Click library to build robust, extensible, and user-friendly command-line interfaces (CLI) for your Python automation and tooling scripts.

Mail addresses
?subject=Python article for you&body=Click and Python: Build Extensible and Composable CLI Apps on Real Python https://realpython.com/python-click/

Opengraph URL: https://realpython.com/python-click/

X: @realpython

direct link

Domain: realpython.com


Hey, it has json ld scripts:
{
  "@context": "http://schema.org",
  "@type": "Article",
  "headline": "Click and Python: Build Extensible and Composable CLI Apps",
  "image": {
    "@type": "ImageObject",
    "url": "https://files.realpython.com/media/Creating-a-CLI-Application-Using-the-Click-Module_Watermarked.1d485ff09664.jpg",
    "width": 1920,
    "height": 1080
  },
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://realpython.com/python-click/",
    "lastReviewed": "2023-10-21",
    "author": {
      "@type": "Person",
      "name": "Leodanis Pozo Ramos",
      "image": "https://realpython.com/cdn-cgi/image/width=862,height=862,fit=crop,gravity=auto,format=auto/https://files.realpython.com/media/Perfil_final1.9f896bc212f6.jpg",
      "url": "https://realpython.com/team/lpozoramos/",
      "affiliation": {
        "@type": "Organization",
        "@id": "https://realpython.com/#organization",
        "name": "Real Python",
        "url": "https://realpython.com",
        "logo": "https://realpython.com/static/real-python-logo-square-512.157ae6bf64ed.png"
      }
    },
    "reviewedBy": [
      {
        "@type": "Person",
        "name": "Aldren Santos",
        "image": "https://realpython.com/cdn-cgi/image/width=500,height=500,fit=crop,gravity=auto,format=auto/https://files.realpython.com/media/Aldren_Santos_Real_Python.6b0861d8b841.png",
        "url": "https://realpython.com/team/asantos/",
        "affiliation": {
          "@type": "Organization",
          "@id": "https://realpython.com/#organization",
          "name": "Real Python",
          "url": "https://realpython.com",
          "logo": "https://realpython.com/static/real-python-logo-square-512.157ae6bf64ed.png"
        }
      },
      {
        "@type": "Person",
        "name": "Bartosz Zaczy\u0144ski",
        "image": "https://realpython.com/cdn-cgi/image/width=1694,height=1694,fit=crop,gravity=auto,format=auto/https://files.realpython.com/media/coders_lab_2109368.259b1599fbee.jpg",
        "url": "https://realpython.com/team/bzaczynski/",
        "affiliation": {
          "@type": "Organization",
          "@id": "https://realpython.com/#organization",
          "name": "Real Python",
          "url": "https://realpython.com",
          "logo": "https://realpython.com/static/real-python-logo-square-512.157ae6bf64ed.png"
        }
      },
      {
        "@type": "Person",
        "name": "Geir Arne Hjelle",
        "image": "https://realpython.com/cdn-cgi/image/width=800,height=800,fit=crop,gravity=auto,format=auto/https://files.realpython.com/media/gahjelle.470149ee709e.jpg",
        "url": "https://realpython.com/team/gahjelle/",
        "affiliation": {
          "@type": "Organization",
          "@id": "https://realpython.com/#organization",
          "name": "Real Python",
          "url": "https://realpython.com",
          "logo": "https://realpython.com/static/real-python-logo-square-512.157ae6bf64ed.png"
        }
      },
      {
        "@type": "Person",
        "name": "Kate Finegan",
        "image": "https://realpython.com/cdn-cgi/image/width=400,height=400,fit=crop,gravity=auto,format=auto/https://files.realpython.com/media/VZxEtUor_400x400.7169c68e3950.jpg",
        "url": "https://realpython.com/team/kfinegan/",
        "affiliation": {
          "@type": "Organization",
          "@id": "https://realpython.com/#organization",
          "name": "Real Python",
          "url": "https://realpython.com",
          "logo": "https://realpython.com/static/real-python-logo-square-512.157ae6bf64ed.png"
        }
      }
    ]
  },
  "datePublished": "2023-08-23T14:00:00+00:00",
  "dateModified": "2023-10-21T03:40:53.999239+00:00",
  "publisher": {
    "@type": "Organization",
    "@id": "https://realpython.com/#organization",
    "name": "Real Python",
    "url": "https://realpython.com",
    "logo": {
      "@type": "ImageObject",
      "url": "https://realpython.com/static/real-python-logo-square-512.157ae6bf64ed.png",
      "width": 512,
      "height": 512
    },
    "description": "Real Python is a leading provider of online Python education and one of the largest language-specific online communities for software developers. It publishes high-quality learning resources, such as tutorials, books, and courses to an audience of millions of developers, data scientists, and machine learning engineers each month.",
    "slogan": "Become a Python Expert",
    "email": "info@realpython.com",
    "sameAs": [
      "https://github.com/realpython",
      "https://www.youtube.com/realpython",
      "https://twitter.com/realpython",
      "https://x.com/realpython",
      "https://www.linkedin.com/company/realpython-com/",
      "https://www.facebook.com/learnrealpython",
      "https://www.instagram.com/realpython",
      "https://www.tiktok.com/@realpython.com"
    ]
  },
  "author": {
    "@type": "Person",
    "name": "Leodanis Pozo Ramos",
    "image": "https://realpython.com/cdn-cgi/image/width=862,height=862,fit=crop,gravity=auto,format=auto/https://files.realpython.com/media/Perfil_final1.9f896bc212f6.jpg",
    "url": "https://realpython.com/team/lpozoramos/",
    "affiliation": {
      "@type": "Organization",
      "@id": "https://realpython.com/#organization",
      "name": "Real Python",
      "url": "https://realpython.com",
      "logo": "https://realpython.com/static/real-python-logo-square-512.157ae6bf64ed.png"
    }
  },
  "description": "In this tutorial, you'll learn how to use the Click library to build robust, extensible, and user-friendly command-line interfaces (CLI) for your Python automation and tooling scripts."
}

authorReal Python
twitter:cardsummary_large_image
twitter:imagehttps://files.realpython.com/media/Creating-a-CLI-Application-Using-the-Click-Module_Watermarked.1d485ff09664.jpg
og:imagehttps://files.realpython.com/media/Creating-a-CLI-Application-Using-the-Click-Module_Watermarked.1d485ff09664.jpg
twitter:creator@realpython
og:typearticle

Links:

https://realpython.com/
Start Herehttps://realpython.com/start-here/
Learn Python https://realpython.com/python-click/
Python Tutorials →In-depth articles and video courseshttps://realpython.com/search?kind=article&kind=course&order=newest
Learning Paths →Guided study plans for accelerated learninghttps://realpython.com/learning-paths/
Quizzes & Exercises →Check your learning progresshttps://realpython.com/quizzes/
Browse Topics →Focus on a specific area or skill levelhttps://realpython.com/tutorials/all/
Community Chat →Learn with other Pythonistashttps://realpython.com/community/
Office Hours →Live Q&A calls with Python expertshttps://realpython.com/office-hours/
Podcast →Hear what’s new in the world of Pythonhttps://realpython.com/podcasts/rpp/
Books →Round out your knowledge and learn offlinehttps://realpython.com/products/books/
Reference →Concise definitions for common Python termshttps://realpython.com/ref/
Code Mentor →BetaPersonalized code assistance & learning toolshttps://realpython.com/mentor/
Unlock All Content →https://realpython.com/account/join/
More https://realpython.com/python-click/
Learner Storieshttps://realpython.com/learner-stories/
Python Newsletterhttps://realpython.com/newsletter/
Python Job Boardhttps://www.pythonjobshq.com
Meet the Teamhttps://realpython.com/team/
Become a Tutorial Writerhttps://realpython.com/write-for-us/
Become a Video Instructorhttps://realpython.com/become-an-instructor/
Searchhttps://realpython.com/search
https://realpython.com/search
Joinhttps://realpython.com/account/join/
Sign‑Inhttps://realpython.com/account/login/?next=%2Fpython-click%2F
Browse Topicshttps://realpython.com/tutorials/all/
Guided Learning Pathshttps://realpython.com/learning-paths/
Basicshttps://realpython.com/search?level=basics
Intermediatehttps://realpython.com/search?level=intermediate
Advancedhttps://realpython.com/search?level=advanced
aihttps://realpython.com/tutorials/ai/
algorithmshttps://realpython.com/tutorials/algorithms/
apihttps://realpython.com/tutorials/api/
best-practiceshttps://realpython.com/tutorials/best-practices/
careerhttps://realpython.com/tutorials/career/
communityhttps://realpython.com/tutorials/community/
databaseshttps://realpython.com/tutorials/databases/
data-sciencehttps://realpython.com/tutorials/data-science/
data-structureshttps://realpython.com/tutorials/data-structures/
data-vizhttps://realpython.com/tutorials/data-viz/
devopshttps://realpython.com/tutorials/devops/
djangohttps://realpython.com/tutorials/django/
dockerhttps://realpython.com/tutorials/docker/
editorshttps://realpython.com/tutorials/editors/
flaskhttps://realpython.com/tutorials/flask/
front-endhttps://realpython.com/tutorials/front-end/
gamedevhttps://realpython.com/tutorials/gamedev/
guihttps://realpython.com/tutorials/gui/
machine-learninghttps://realpython.com/tutorials/machine-learning/
newshttps://realpython.com/tutorials/news/
numpyhttps://realpython.com/tutorials/numpy/
projectshttps://realpython.com/tutorials/projects/
pythonhttps://realpython.com/tutorials/python/
stdlibhttps://realpython.com/tutorials/stdlib/
testinghttps://realpython.com/tutorials/testing/
toolshttps://realpython.com/tutorials/tools/
web-devhttps://realpython.com/tutorials/web-dev/
web-scrapinghttps://realpython.com/tutorials/web-scraping/
Table of Contentshttps://realpython.com/python-click/#toc
Creating Command-Line Interfaces With Click and Pythonhttps://realpython.com/python-click/#creating-command-line-interfaces-with-click-and-python
Why Use Click for CLI Developmenthttps://realpython.com/python-click/#why-use-click-for-cli-development
How to Install and Set Up Click: Your First CLI Apphttps://realpython.com/python-click/#how-to-install-and-set-up-click-your-first-cli-app
Adding Arguments to a Click Apphttps://realpython.com/python-click/#adding-arguments-to-a-click-app
Adding Basic Argumentshttps://realpython.com/python-click/#adding-basic-arguments
Using Path Argumentshttps://realpython.com/python-click/#using-path-arguments
Accepting Variadic Argumentshttps://realpython.com/python-click/#accepting-variadic-arguments
Taking File Argumentshttps://realpython.com/python-click/#taking-file-arguments
Providing Options in Your Click Appshttps://realpython.com/python-click/#providing-options-in-your-click-apps
Adding Single-Value Optionshttps://realpython.com/python-click/#adding-single-value-options
Creating Multi-Value Optionshttps://realpython.com/python-click/#creating-multi-value-options
Specifying an Option Multiple Timeshttps://realpython.com/python-click/#specifying-an-option-multiple-times
Defining Options as Boolean Flagshttps://realpython.com/python-click/#defining-options-as-boolean-flags
Creating Feature Switcheshttps://realpython.com/python-click/#creating-feature-switches
Getting an Option’s Value From Multiple Choiceshttps://realpython.com/python-click/#getting-an-options-value-from-multiple-choices
Getting Options From Environment Variableshttps://realpython.com/python-click/#getting-options-from-environment-variables
Prompting the User for Input Valueshttps://realpython.com/python-click/#prompting-the-user-for-input-values
Providing Parameter Types for Arguments and Optionshttps://realpython.com/python-click/#providing-parameter-types-for-arguments-and-options
Creating Subcommands in Clickhttps://realpython.com/python-click/#creating-subcommands-in-click
Registering Subcommand Right Awayhttps://realpython.com/python-click/#registering-subcommand-right-away
Deferring Subcommand Registrationhttps://realpython.com/python-click/#deferring-subcommand-registration
Tweaking Usage and Help Messages in a Click Apphttps://realpython.com/python-click/#tweaking-usage-and-help-messages-in-a-click-app
Documenting Commands and Optionshttps://realpython.com/python-click/#documenting-commands-and-options
Documenting Argumentshttps://realpython.com/python-click/#documenting-arguments
Preparing a Click App for Installation and Usehttps://realpython.com/python-click/#preparing-a-click-app-for-installation-and-use
Create a Project Layout for Your CLI Apphttps://realpython.com/python-click/#create-a-project-layout-for-your-cli-app
Write a pyproject.toml File for Your Click Projecthttps://realpython.com/python-click/#write-a-pyprojecttoml-file-for-your-click-project
Create a Virtual Environment and Install Your Click Apphttps://realpython.com/python-click/#create-a-virtual-environment-and-install-your-click-app
Conclusionhttps://realpython.com/python-click/#conclusion
https://realpython.com/feedback/survey/article/python-click/liked/?from=article-sidebar
https://realpython.com/feedback/survey/article/python-click/disliked/?from=article-sidebar
Leodanis Pozo Ramoshttps://realpython.com/python-click/#author
https://realpython.com/python-click/#reader-comments
intermediatehttps://realpython.com/tutorials/intermediate/
devopshttps://realpython.com/tutorials/devops/
pythonhttps://realpython.com/tutorials/python/
toolshttps://realpython.com/tutorials/tools/
Creating Command-Line Interfaces With Click and Pythonhttps://realpython.com/python-click/#creating-command-line-interfaces-with-click-and-python
Why Use Click for CLI Developmenthttps://realpython.com/python-click/#why-use-click-for-cli-development
How to Install and Set Up Click: Your First CLI Apphttps://realpython.com/python-click/#how-to-install-and-set-up-click-your-first-cli-app
Adding Arguments to a Click Apphttps://realpython.com/python-click/#adding-arguments-to-a-click-app
Adding Basic Argumentshttps://realpython.com/python-click/#adding-basic-arguments
Using Path Argumentshttps://realpython.com/python-click/#using-path-arguments
Accepting Variadic Argumentshttps://realpython.com/python-click/#accepting-variadic-arguments
Taking File Argumentshttps://realpython.com/python-click/#taking-file-arguments
Providing Options in Your Click Appshttps://realpython.com/python-click/#providing-options-in-your-click-apps
Adding Single-Value Optionshttps://realpython.com/python-click/#adding-single-value-options
Creating Multi-Value Optionshttps://realpython.com/python-click/#creating-multi-value-options
Specifying an Option Multiple Timeshttps://realpython.com/python-click/#specifying-an-option-multiple-times
Defining Options as Boolean Flagshttps://realpython.com/python-click/#defining-options-as-boolean-flags
Creating Feature Switcheshttps://realpython.com/python-click/#creating-feature-switches
Getting an Option’s Value From Multiple Choiceshttps://realpython.com/python-click/#getting-an-options-value-from-multiple-choices
Getting Options From Environment Variableshttps://realpython.com/python-click/#getting-options-from-environment-variables
Prompting the User for Input Valueshttps://realpython.com/python-click/#prompting-the-user-for-input-values
Providing Parameter Types for Arguments and Optionshttps://realpython.com/python-click/#providing-parameter-types-for-arguments-and-options
Creating Subcommands in Clickhttps://realpython.com/python-click/#creating-subcommands-in-click
Registering Subcommand Right Awayhttps://realpython.com/python-click/#registering-subcommand-right-away
Deferring Subcommand Registrationhttps://realpython.com/python-click/#deferring-subcommand-registration
Tweaking Usage and Help Messages in a Click Apphttps://realpython.com/python-click/#tweaking-usage-and-help-messages-in-a-click-app
Documenting Commands and Optionshttps://realpython.com/python-click/#documenting-commands-and-options
Documenting Argumentshttps://realpython.com/python-click/#documenting-arguments
Preparing a Click App for Installation and Usehttps://realpython.com/python-click/#preparing-a-click-app-for-installation-and-use
Create a Project Layout for Your CLI Apphttps://realpython.com/python-click/#create-a-project-layout-for-your-cli-app
Write a pyproject.toml File for Your Click Projecthttps://realpython.com/python-click/#write-a-pyprojecttoml-file-for-your-click-project
Create a Virtual Environment and Install Your Click Apphttps://realpython.com/python-click/#create-a-virtual-environment-and-install-your-click-app
Conclusionhttps://realpython.com/python-click/#conclusion
Remove adshttps://realpython.com/account/join/
command-line interface (CLI)https://en.wikipedia.org/wiki/Command-line_interface
argparsehttps://realpython.com/command-line-interfaces-python-argparse/
standard libraryhttps://docs.python.org/3/library/index.html
Typerhttps://realpython.com/python-typer-cli/
decoratorshttps://realpython.com/primer-on-python-decorators/
terminalhttps://realpython.com/terminal-commands/
Click here to download the sample codehttps://realpython.com/bonus/python-click-code/
https://realpython.com/python-click/#creating-command-line-interfaces-with-click-and-python
Clickhttps://click.palletsprojects.com/en/8.0.x/
command-line interfaces (CLIs)https://realpython.com/python-command-line-arguments/#the-command-line-interface
argparsehttps://realpython.com/command-line-interfaces-python-argparse/
Remove adshttps://realpython.com/account/join/
https://realpython.com/python-click/#why-use-click-for-cli-development
application programming interface (API)https://en.wikipedia.org/wiki/API
decoratorshttps://realpython.com/primer-on-python-decorators/
arguments, options, and subcommandshttps://realpython.com/command-line-interfaces-python-argparse/#commands-arguments-options-parameters-and-subcommands
Functionshttps://realpython.com/defining-your-own-python-function/
Unixhttps://en.wikipedia.org/wiki/Unix-like
https://realpython.com/python-click/#how-to-install-and-set-up-click-your-first-cli-app
PyPIhttps://pypi.org/
piphttps://realpython.com/what-is-pip/
virtual environmenthttps://realpython.com/python-virtual-environments-a-primer/
Windowshttps://realpython.com/python-click/#windows-1
Linux + macOShttps://realpython.com/python-click/#linux-macos-1
code editorhttps://realpython.com/python-ides-code-editors-guide/
importhttps://realpython.com/python-import/
echo()https://click.palletsprojects.com/en/8.0.x/api/#click.echo
print()https://realpython.com/python-print/
@click.commandhttps://click.palletsprojects.com/en/8.0.x/api/#click.command
@click.version_optionhttps://click.palletsprojects.com/en/8.0.x/api/#click.version_option
name-mainhttps://realpython.com/if-name-main-python/
run the scripthttps://realpython.com/run-python-scripts/
Remove adshttps://realpython.com/account/join/
https://realpython.com/python-click/#adding-arguments-to-a-click-app
environment variableshttps://en.wikipedia.org/wiki/Environment_variable
https://realpython.com/python-click/#adding-basic-arguments
stringshttps://realpython.com/python-strings/
lshttps://en.wikipedia.org/wiki/Ls
Windowshttps://realpython.com/python-coding-setup-windows/
Click here to download the sample codehttps://realpython.com/bonus/python-click-code/
Pathhttps://realpython.com/python-pathlib/#path-instantiation-with-pythons-pathlib
pathlibhttps://realpython.com/python-pathlib/
@click.argumenthttps://click.palletsprojects.com/en/8.0.x/api/#click.argument
instancehttps://realpython.com/python-classes/#creating-objects-from-a-class-in-python
exit statushttps://en.wikipedia.org/wiki/Exit_status
for loophttps://realpython.com/python-for-loop/
How to Get a List of All Files in a Directory With Pythonhttps://realpython.com/get-all-files-in-directory-python/
.iterdir()https://docs.python.org/3/library/pathlib.html#pathlib.Path.iterdir
Remove adshttps://realpython.com/account/join/
https://realpython.com/python-click/#using-path-arguments
classeshttps://realpython.com/python-classes/
Providing Parameter Types for Arguments and Optionshttps://realpython.com/python-click/#providing-parameter-types-for-arguments-and-options
click.Pathhttps://click.palletsprojects.com/en/8.0.x/api/#click.Path
https://realpython.com/python-click/#accepting-variadic-arguments
statementhttps://realpython.com/python-conditional-statements/
enumerate()https://realpython.com/python-enumerate/
Remove adshttps://realpython.com/account/join/
https://realpython.com/python-click/#taking-file-arguments
parameter typehttps://click.palletsprojects.com/en/8.0.x/api/#types
Filehttps://click.palletsprojects.com/en/8.0.x/api/#click.File
cathttps://en.wikipedia.org/wiki/Cat_(Unix)
standard outputhttps://en.wikipedia.org/wiki/Standard_output
https://realpython.com/python-click/#providing-options-in-your-click-apps
optionshttps://click.palletsprojects.com/en/8.0.x/api/#click.Option
multiple optionshttps://click.palletsprojects.com/en/8.0.x/options/#multiple-options
https://realpython.com/python-click/#adding-single-value-options
@click.optionhttps://click.palletsprojects.com/en/8.0.x/api/#click.option
click.STRINGhttps://click.palletsprojects.com/en/8.0.x/api/#click.STRING
tailhttps://en.wikipedia.org/wiki/Tail_(Unix)
dequehttps://realpython.com/python-deque/
collectionshttps://realpython.com/python-collections-module/
deque recipeshttps://docs.python.org/3/library/collections.html#deque-recipes
integerhttps://realpython.com/python-numbers/#integers
click.INThttps://click.palletsprojects.com/en/8.0.x/api/#click.INT
Remove adshttps://realpython.com/account/join/
https://realpython.com/python-click/#creating-multi-value-options
Remove adshttps://realpython.com/account/join/
https://realpython.com/python-click/#specifying-an-option-multiple-times
Booleanhttps://realpython.com/python-boolean/
https://realpython.com/python-click/#defining-options-as-boolean-flags
Boolean flagshttps://click.palletsprojects.com/en/8.0.x/options/#boolean-flags
returnshttps://realpython.com/python-return-statement/
Path.stat()https://docs.python.org/3/library/pathlib.html#pathlib.Path.stat
datetimehttps://realpython.com/python-datetime/
stringhttps://realpython.com/python-strings/
Remove adshttps://realpython.com/account/join/
https://realpython.com/python-click/#creating-feature-switches
feature switcheshttps://click.palletsprojects.com/en/8.0.x/options/#feature-switches
https://realpython.com/python-click/#getting-an-options-value-from-multiple-choices
Choicehttps://click.palletsprojects.com/en/8.0.x/api/#click.Choice
https://realpython.com/python-click/#getting-options-from-environment-variables
REST APIhttps://realpython.com/api-integration-in-python/
main API pagehttps://api.nasa.gov/
webbrowserhttps://docs.python.org/3/library/webbrowser.html?highlight=webbrowser#module-webbrowser
requestshttps://realpython.com/python-requests/
Python & APIs: A Winning Combo for Reading Public Datahttps://realpython.com/python-api/
endpointhttps://realpython.com/api-integration-in-python/#api-endpoints
API pagehttps://api.nasa.gov/
Remove adshttps://realpython.com/account/join/
https://realpython.com/python-click/#prompting-the-user-for-input-values
Promptinghttps://click.palletsprojects.com/en/8.0.x/options/#option-prompting
@click.password_optionhttps://click.palletsprojects.com/en/8.0.x/api/#click.password_option
@click.confirmation_optionhttps://click.palletsprojects.com/en/8.0.x/api/#click.confirmation_option
prompt()https://click.palletsprojects.com/en/8.0.x/api/#click.prompt
floating-pointhttps://realpython.com/python-numbers/#floating-point-numbers
confirm()https://click.palletsprojects.com/en/8.0.x/api/#click.confirm
Remove adshttps://realpython.com/account/join/
https://realpython.com/python-click/#providing-parameter-types-for-arguments-and-options
typeshttps://click.palletsprojects.com/en/8.0.x/parameters/#parameter-types
click.STRINGhttps://click.palletsprojects.com/en/8.0.x/api/#click.STRING
Unicode stringshttps://realpython.com/python-sort-unicode-strings/
click.INThttps://click.palletsprojects.com/en/8.0.x/api/#click.INT
click.FLOAThttps://click.palletsprojects.com/en/8.0.x/api/#click.FLOAT
click.BOOLhttps://click.palletsprojects.com/en/8.0.x/api/#click.BOOL
constantshttps://realpython.com/python-constants/
click.IntRangehttps://click.palletsprojects.com/en/8.0.x/api/#click.IntRange
click.FloatRangehttps://click.palletsprojects.com/en/8.0.x/api/#click.FloatRange
click.DateTimehttps://click.palletsprojects.com/en/8.0.x/api/#click.DateTime
datetimehttps://realpython.com/python-datetime/
custom parameter typehttps://click.palletsprojects.com/en/8.0.x/parameters/#implementing-custom-types
https://realpython.com/python-click/#creating-subcommands-in-click
Nested commandshttps://click.palletsprojects.com/en/8.0.x/quickstart/#nesting-commands
piphttps://realpython.com/what-is-pip/
pyenvhttps://realpython.com/intro-to-pyenv/
Poetryhttps://realpython.com/dependency-management-python-poetry/
githttps://realpython.com/python-git-github-intro/
installhttps://realpython.com/what-is-pip/#installing-packages-with-pip
pullhttps://realpython.com/python-git-github-intro/#pull
pushhttps://realpython.com/python-git-github-intro/#push
clonehttps://realpython.com/python-git-github-intro/#clone
@click.grouphttps://click.palletsprojects.com/en/8.0.x/api/#click.group
https://realpython.com/python-click/#registering-subcommand-right-away
passhttps://realpython.com/python-pass/
Remove adshttps://realpython.com/account/join/
https://realpython.com/python-click/#deferring-subcommand-registration
refactorhttps://realpython.com/python-refactoring/
directory treehttps://realpython.com/directory-tree-generator-python/
https://realpython.com/python-click/#tweaking-usage-and-help-messages-in-a-click-app
graphical user interfacehttps://realpython.com/python-pyqt-gui-calculator/
https://realpython.com/python-click/#documenting-commands-and-options
docstringhttps://realpython.com/documenting-python-code/#documenting-your-python-code-base-using-docstrings
docstringhttps://realpython.com/how-to-write-docstrings-in-python/
https://realpython.com/python-click/#documenting-arguments
Sourcehttps://click.palletsprojects.com/en/8.0.x/documentation/#documenting-arguments
https://realpython.com/python-click/#preparing-a-click-app-for-installation-and-use
setuptoolshttps://click.palletsprojects.com/en/7.x/quickstart/#switching-to-setuptools
https://realpython.com/python-click/#create-a-project-layout-for-your-cli-app
lay outhttps://realpython.com/python-application-layouts/
modules and packageshttps://realpython.com/python-modules-packages/
pyproject.tomlhttps://realpython.com/python-pyproject-toml/
TOMLhttps://realpython.com/python-toml/
build systemhttps://realpython.com/pypi-publish-python-package/#build-your-package
README.mdhttps://dbader.org/blog/write-a-great-readme-for-your-github-project
publish the project to PyPIhttps://realpython.com/pypi-publish-python-package/
packagehttps://realpython.com/python-modules-packages/
relative importhttps://realpython.com/absolute-vs-relative-python-imports/#relative-imports
https://realpython.com/python-click/#write-a-pyprojecttoml-file-for-your-click-project
table headerhttps://realpython.com/python-toml/#tables
https://realpython.com/python-click/#create-a-virtual-environment-and-install-your-click-app
Windowshttps://realpython.com/python-click/#windows-2
Linux + macOShttps://realpython.com/python-click/#linux-macos-2
editable modehttps://realpython.com/what-is-pip/#installing-packages-in-editable-mode-to-ease-development
https://realpython.com/python-click/#conclusion
Click here to download the sample codehttps://realpython.com/bonus/python-click-code/
https://realpython.com/feedback/survey/article/python-click/liked/?from=article-footer
https://realpython.com/feedback/survey/article/python-click/disliked/?from=article-footer
https://realpython.com/team/lpozoramos/
» More about Leodanishttps://realpython.com/team/lpozoramos/
https://realpython.com/team/asantos/
Aldrenhttps://realpython.com/team/asantos/
https://realpython.com/team/bzaczynski/
Bartoszhttps://realpython.com/team/bzaczynski/
https://realpython.com/team/gahjelle/
Geir Arnehttps://realpython.com/team/gahjelle/
https://realpython.com/team/kfinegan/
Katehttps://realpython.com/team/kfinegan/
Level Up Your Python Skills »https://realpython.com/account/join/?utm_source=rp_article_footer&utm_content=python-click
Level Up Your Python Skills »https://realpython.com/account/join/?utm_source=rp_article_footer&utm_content=python-click
https://realpython.com/feedback/survey/article/python-click/liked/?from=article-comments
https://realpython.com/feedback/survey/article/python-click/disliked/?from=article-comments
LinkedInhttps://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Frealpython.com%2Fpython-click%2F
Twitterhttps://twitter.com/intent/tweet/?text=Interesting%20Python%20article%20on%20%40realpython%3A%20Click%20and%20Python%3A%20Build%20Extensible%20and%20Composable%20CLI%20Apps&url=https%3A%2F%2Frealpython.com%2Fpython-click%2F
Blueskyhttps://bsky.app/intent/compose?text=Interesting%20Python%20article%20on%20%40realpython.com%3A%20Click%20and%20Python%3A%20Build%20Extensible%20and%20Composable%20CLI%20Apps%20https%3A%2F%2Frealpython.com%2Fpython-click%2F
Facebookhttps://facebook.com/sharer/sharer.php?u=https%3A%2F%2Frealpython.com%2Fpython-click%2F
Get tips for asking good questionshttps://realpython.com/python-beginner-tips/#tip-9-ask-good-questions
get answers to common questions in our support portalhttps://support.realpython.com
Real Python Community Chathttps://realpython.com/community/
“Office Hours” Live Q&A Sessionhttps://realpython.com/office-hours/
intermediatehttps://realpython.com/tutorials/intermediate/
devopshttps://realpython.com/tutorials/devops/
pythonhttps://realpython.com/tutorials/python/
toolshttps://realpython.com/tutorials/tools/
Build a Command-Line To-Do App With Python and Typerhttps://realpython.com/python-typer-cli/?utm_source=realpython&utm_medium=web&utm_campaign=related-post&utm_content=python-click
Build Command-Line Interfaces With Python's argparsehttps://realpython.com/command-line-interfaces-python-argparse/?utm_source=realpython&utm_medium=web&utm_campaign=related-post&utm_content=python-click
Python's pathlib Module: Taming the File Systemhttps://realpython.com/python-pathlib/?utm_source=realpython&utm_medium=web&utm_campaign=related-post&utm_content=python-click
Python Inner Functions: What Are They Good For?https://realpython.com/inner-functions-what-are-they-good-for/?utm_source=realpython&utm_medium=web&utm_campaign=related-post&utm_content=python-click
Primer on Python Decoratorshttps://realpython.com/primer-on-python-decorators/?utm_source=realpython&utm_medium=web&utm_campaign=related-post&utm_content=python-click
https://realpython.com/account/signup/?intent=continue_reading&utm_source=rp&utm_medium=web&utm_campaign=rwn&utm_content=v1&next=%2Fpython-click%2F
Continue »https://realpython.com/account/signup/?intent=continue_reading&utm_source=rp&utm_medium=web&utm_campaign=rwn&utm_content=v1&next=%2Fpython-click%2F
Sign-Inhttps://realpython.com/account/login/?next=/python-click/
Start Herehttps://realpython.com/start-here/
Learning Resourceshttps://realpython.com/search
Code Mentorhttps://realpython.com/mentor/
Python Referencehttps://realpython.com/ref/
Python Cheat Sheethttps://realpython.com/cheatsheets/python/
Support Centerhttps://support.realpython.com/
Learning Pathshttps://realpython.com/learning-paths/
Quizzes & Exerciseshttps://realpython.com/quizzes/
Browse Topicshttps://realpython.com/tutorials/all/
Live Courseshttps://realpython.com/live/
Bookshttps://realpython.com/books/
Podcasthttps://realpython.com/podcasts/rpp/
Newsletterhttps://realpython.com/newsletter/
Community Chathttps://realpython.com/community/
Office Hourshttps://realpython.com/office-hours/
Learner Storieshttps://realpython.com/learner-stories/
Plans & Pricinghttps://realpython.com/account/join/
Team Planshttps://realpython.com/account/join-team/
For Businesshttps://realpython.com/account/join-team/inquiry/
For Schoolshttps://realpython.com/account/join-team/education-inquiry/
Reviewshttps://realpython.com/learner-stories/
About Ushttps://realpython.com/about/
Teamhttps://realpython.com/team/
Mission & Valueshttps://realpython.com/mission/
Editorial Guidelineshttps://realpython.com/editorial-guidelines/
Sponsorshipshttps://realpython.com/sponsorships/
Careershttps://realpython.workable.com
Press Kithttps://realpython.com/media-kit/
Merchhttps://realpython.com/merch
https://www.youtube.com/realpython
https://x.com/realpython
https://www.linkedin.com/company/realpython-com
https://www.facebook.com/LearnRealPython
https://github.com/realpython/
Privacy Policyhttps://realpython.com/privacy-policy/
Terms of Usehttps://realpython.com/terms/
Securityhttps://realpython.com/security/
Contacthttps://realpython.com/contact/
https://realpython.com/

Viewport: width=device-width, initial-scale=1, shrink-to-fit=no, viewport-fit=cover

Robots: max-image-preview:large


URLs of crawlers that visited me.