{"library":"pygnmi","title":"pygnmi: gNMI Client for Network Automation","description":"pygnmi (current version 0.8.15) is a pure Python gNMI client designed for managing network functions and collecting telemetry data. It provides an interface to interact with gNMI-enabled network devices, supporting operations like Get, Set, and Subscribe. The library is actively maintained with frequent minor releases, typically addressing bug fixes, performance improvements, and adding support for new gNMI features.","language":"python","status":"active","last_verified":"Mon May 18","install":{"commands":["pip install pygnmi"],"cli":null},"imports":["from pygnmi.client import gNMIclient"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nfrom pygnmi.client import gNMIclient\n\n# Environment variables for connection details or default values\nGNMI_HOST = os.environ.get('GNMI_HOST', 'localhost')\nGNMI_PORT = int(os.environ.get('GNMI_PORT', '50051'))\nGNMI_USERNAME = os.environ.get('GNMI_USERNAME', 'admin')\nGNMI_PASSWORD = os.environ.get('GNMI_PASSWORD', 'admin')\n\n# Configure the gNMI target\ntarget = {\n    'addr': f'{GNMI_HOST}:{GNMI_PORT}',\n    'username': GNMI_USERNAME,\n    'password': GNMI_PASSWORD,\n    'insecure': True,  # Set to False for secure TLS connections and provide certificates\n    'encoding': 'JSON_IETF', # Or None to auto-detect based on device capabilities\n}\n\ntry:\n    with gNMIclient(target=target) as c:\n        # Get device capabilities\n        capabilities = c.capabilities()\n        print(\"\\n--- Device Capabilities ---\")\n        print(capabilities)\n\n        # Example: Get system hostname (path may vary by device/OS)\n        # Using a common path, adjust as needed for your device\n        hostname_path = ['/system/state/hostname']\n        get_response = c.get(path=hostname_path, encoding='JSON_IETF')\n        print(\"\\n--- Get Response (Hostname) ---\")\n        print(get_response)\n\n        # Example: Subscribe to an operational state (uncomment to run)\n        # subscription_paths = [\n        #    ('/interfaces/interface[name=eth0]/state/oper-status', True)\n        # ]\n        # print(\"\\n--- Subscribe (Streaming) ---\")\n        # for update in c.subscribe2(path_tuples=subscription_paths, subscribe_mode='STREAM', encoding='JSON_IETF'):\n        #    print(update)\n        #    # Add logic to break from loop after a few updates or a timeout\n\nexcept Exception as e:\n    print(f\"An error occurred: {e}\")\n    print(\"Please ensure the gNMI server is running and accessible with correct credentials.\")","lang":"python","description":"This quickstart demonstrates how to connect to a gNMI target, retrieve its capabilities, and perform a 'Get' operation for a specific path. It includes placeholders for host, port, and credentials, defaulting to common local development values or environment variables. An example for 'Subscribe' is provided but commented out.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-18","installed_version":"0.8.15","pypi_latest":"0.8.15","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":3.8,"avg_import_s":0.7,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"pygnmi","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.51,"mem_mb":11.9,"disk_size":"56.5M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"pygnmi","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.3,"import_time_s":0.26,"mem_mb":10.4,"disk_size":"54M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"pygnmi","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.13,"mem_mb":13.3,"disk_size":"59.7M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"pygnmi","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.5,"import_time_s":0.62,"mem_mb":11.7,"disk_size":"57M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"pygnmi","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.13,"mem_mb":13.2,"disk_size":"51.4M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"pygnmi","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.9,"import_time_s":0.77,"mem_mb":11.7,"disk_size":"49M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"pygnmi","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.07,"mem_mb":13.3,"disk_size":"51.1M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"pygnmi","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.3,"import_time_s":0.75,"mem_mb":11.8,"disk_size":"49M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"pygnmi","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.4,"mem_mb":12.1,"disk_size":"56.8M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"pygnmi","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":5,"import_time_s":0.34,"mem_mb":10.6,"disk_size":"55M"}]}}