{"library":"py-consul","title":"py-consul: Python Client for Consul","description":"py-consul is an actively maintained Python client for Hashicorp Consul, enabling interaction with its Key/Value store, service discovery, health checks, and ACLs. It provides both synchronous and asynchronous (asyncio-based) interfaces. The library is currently at version 1.7.1 and releases occur periodically to address bug fixes, introduce new features, and maintain compatibility with newer Python and Consul versions.","language":"python","status":"active","last_verified":"Fri May 15","install":{"commands":["pip install py-consul"],"cli":null},"imports":["from consul import Consul","from consul import aio"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import consul\nimport os\n\n# Configure Consul client (defaults to localhost:8500)\n# Use environment variable CONSUL_HTTP_ADDR for production setup\nconsul_host = os.environ.get('CONSUL_HTTP_ADDR', '127.0.0.1')\nconsul_port = int(os.environ.get('CONSUL_HTTP_PORT', '8500'))\nconsul_token = os.environ.get('CONSUL_HTTP_TOKEN', None)\n\nc = consul.Consul(host=consul_host, port=consul_port, token=consul_token)\n\n# --- Key-Value Store Operations ---\n\n# 1. Put a key-value pair\nsuccess = c.kv.put('my-app/config/greeting', 'Hello, Consul!')\nif success:\n    print(\"Key 'my-app/config/greeting' set successfully.\")\n\n# 2. Get a key-value pair\nindex, data = c.kv.get('my-app/config/greeting')\nif data:\n    value = data['Value'].decode('utf-8') # Value is bytes, needs decoding\n    print(f\"Retrieved key: {data['Key']}, Value: {value}, ModifyIndex: {data['ModifyIndex']}\")\nelse:\n    print(\"Key 'my-app/config/greeting' not found.\")\n\n# 3. List keys under a prefix\nindex, keys = c.kv.get('my-app/config/', recurse=True)\nif keys:\n    print(\"\\nKeys under 'my-app/config/':\")\n    for item in keys:\n        key = item['Key']\n        value = item['Value'].decode('utf-8') if item['Value'] else None\n        print(f\"  - {key}: {value}\")\nelse:\n    print(\"\\nNo keys found under 'my-app/config/'.\")\n\n# --- Service Registration (Agent API) ---\n# This requires a running Consul agent\n# try:\n#     c.agent.service.register(\n#         'my-service',\n#         service_id='my-service-1',\n#         address='127.0.0.1',\n#         port=8000,\n#         tags=['web', 'python'],\n#         check=consul.check.HTTP('http://127.0.0.1:8000/health', interval='10s')\n#     )\n#     print(\"\\nService 'my-service-1' registered.\")\n# except Exception as e:\n#     print(f\"\\nFailed to register service: {e}\")\n","lang":"python","description":"This quickstart demonstrates how to initialize the `py-consul` client and perform basic Key/Value store operations such as setting, retrieving, and listing entries. It also includes an example of service registration using the agent API (commented out by default) and shows how to handle Consul's byte string values.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-15","installed_version":"1.6.1","pypi_latest":"1.7.1","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":2.1,"avg_import_s":0.6,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"py-consul","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.56,"mem_mb":10,"disk_size":"21.5M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"py-consul","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.1,"import_time_s":0.4,"mem_mb":10,"disk_size":"22M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"py-consul","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.73,"mem_mb":11.1,"disk_size":"23.6M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"py-consul","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.1,"import_time_s":0.61,"mem_mb":11.1,"disk_size":"24M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"py-consul","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.66,"mem_mb":11.6,"disk_size":"15.4M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"py-consul","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2,"import_time_s":0.68,"mem_mb":11.6,"disk_size":"16M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"py-consul","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.69,"mem_mb":11.9,"disk_size":"15.1M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"py-consul","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2,"import_time_s":0.63,"mem_mb":11.9,"disk_size":"16M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"py-consul","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.54,"mem_mb":9.7,"disk_size":"20.8M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"py-consul","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.5,"import_time_s":0.46,"mem_mb":9.7,"disk_size":"21M"}]}}