{"library":"pubnub","title":"PubNub Python SDK","description":"The PubNub Python SDK provides real-time messaging, presence, and push services. It enables developers to build interactive applications with features like chat, IoT, and live event streaming. The current stable version is 10.6.2, with active development and frequent releases addressing bug fixes and feature enhancements, typically on a monthly to quarterly cadence.","language":"python","status":"active","last_verified":"Mon May 18","install":{"commands":["pip install pubnub"],"cli":null},"imports":["from pubnub.pubnub import PubNub","from pubnub.pnconfiguration import PNConfiguration","from pubnub.callbacks import SubscribeCallback","from pubnub.enums import PNStatusCategory"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nimport time\nfrom pubnub.pubnub import PubNub\nfrom pubnub.pnconfiguration import PNConfiguration\nfrom pubnub.callbacks import SubscribeCallback\nfrom pubnub.enums import PNStatusCategory\n\n# Replace with your actual publish and subscribe keys\npublish_key = os.environ.get('PUBNUB_PUBLISH_KEY', 'demo')\nsubscribe_key = os.environ.get('PUBNUB_SUBSCRIBE_KEY', 'demo')\n\nif publish_key == 'demo' or subscribe_key == 'demo':\n    print(\"WARNING: Using demo keys. Replace with your own PubNub keys for production.\")\n\npnconfig = PNConfiguration()\npnconfig.publish_key = publish_key\npnconfig.subscribe_key = subscribe_key\npnconfig.uuid = \"my_unique_uuid_py\"\n\npnub = PubNub(pnconfig)\n\nclass MySubscribeCallback(SubscribeCallback):\n    def presence(self, pubnub, presence):\n        print(f\"PRESENCE: {presence.event}\")\n\n    def status(self, pubnub, status):\n        if status.category == PNStatusCategory.PNUnexpectedDisconnectCategory:\n            print(\"Disconnected.\")\n        elif status.category == PNStatusCategory.PNConnectedCategory:\n            print(\"Connected to PubNub.\")\n        elif status.category == PNStatusCategory.PNReconnectedCategory:\n            print(\"Reconnected to PubNub.\")\n        else:\n            print(f\"STATUS: {status.category}\")\n\n    def message(self, pubnub, message):\n        print(f\"MESSAGE: {message.message} from {message.channel}\")\n\npnub.add_listener(MySubscribeCallback())\npnub.subscribe().channels('my_channel').with_presence().execute()\n\ntry:\n    print(\"Publishing 'hello world' in 5 seconds...\")\n    time.sleep(5)\n    pubnub.publish().channel('my_channel').message({'text': 'hello world', 'timestamp': time.time()}).sync()\n    print(\"Published 'hello world'. Staying subscribed for 10 seconds.\")\n    time.sleep(10)\nfinally:\n    pubnub.unsubscribe().channels('my_channel').execute()\n    pubnub.stop()\n    print(\"Unsubscribed and stopped PubNub client.\")\n","lang":"python","description":"This quickstart initializes the PubNub client, subscribes to a channel, and publishes a message. It demonstrates setting up `PNConfiguration`, attaching a `SubscribeCallback` for handling messages, status, and presence events, and performing basic publish/subscribe operations. Remember to replace demo keys with your own.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-18","installed_version":"10.6.3","pypi_latest":"10.6.3","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":7.1,"avg_import_s":0.33,"wheel_type":"sdist"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"pubnub","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.28,"mem_mb":9.5,"disk_size":"47.3M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"pubnub","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":7.4,"import_time_s":0.21,"mem_mb":9.5,"disk_size":"50M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"pubnub","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.41,"mem_mb":10.8,"disk_size":"52.5M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"pubnub","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":6.5,"import_time_s":0.4,"mem_mb":10.8,"disk_size":"55M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"pubnub","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.37,"mem_mb":10.6,"disk_size":"42.0M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"pubnub","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":6.4,"import_time_s":0.4,"mem_mb":10.6,"disk_size":"45M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"pubnub","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.34,"mem_mb":11.1,"disk_size":"41.4M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"pubnub","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":6.5,"import_time_s":0.38,"mem_mb":11.1,"disk_size":"44M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"pubnub","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.27,"mem_mb":9.7,"disk_size":"46.6M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"pubnub","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":8.6,"import_time_s":0.26,"mem_mb":9.7,"disk_size":"50M"}]}}