{"id":1002,"library":"opencensus-context","title":"OpenCensus Runtime Context","description":"OpenCensus Runtime Context is a Python library that provides in-process context propagation, using `contextvars` for Python 3.6+ (with asyncio support) and thread-local storage for older Python versions (2.7, 3.4, 3.5). While the `opencensus-python` repository still exists, the broader OpenCensus project has merged with OpenTracing to form OpenTelemetry, which is now the recommended successor for observability. This library's last release was in August 2022, version 0.1.3. [1, 2, 3, 9]","status":"deprecated","version":"0.1.3","language":"python","source_language":"en","source_url":"https://github.com/census-instrumentation/opencensus-python/tree/master/context/opencensus-context","tags":["observability","tracing","metrics","context-propagation","deprecated","opentelemetry","azure"],"install":[{"cmd":"pip install opencensus-context","lang":"bash","label":"Install `opencensus-context`"}],"dependencies":[{"reason":"Typically installed as a dependency of the main `opencensus` package. [1, 2]","package":"opencensus"}],"imports":[{"symbol":"RuntimeContext","correct":"from opencensus.common.runtime_context import RuntimeContext"}],"quickstart":{"code":"from threading import Thread\nfrom opencensus.common.runtime_context import RuntimeContext\n\ndef work(name):\n    # The context is automatically propagated to new threads started via with_current_context\n    current_context = RuntimeContext.current_context()\n    print(f\"Worker '{name}' in context: {current_context}\")\n\n# Create a context on the main thread\nRuntimeContext.current_context()['request_id'] = 'main_req_123'\n\n# Propagate context explicitly to a new thread\nthread = Thread(\n    target=RuntimeContext.with_current_context(work),\n    args=('child_thread_A',),\n)\nthread.start()\nthread.join()\n\n# Another example with a simple function call in the current context\ndef another_work(name):\n    current_context = RuntimeContext.current_context()\n    print(f\"Another worker '{name}' in context: {current_context}\")\n\nanother_work('direct_call_B')","lang":"python","description":"This example demonstrates how to explicitly propagate the runtime context to a new thread using `RuntimeContext.with_current_context`. By default, context propagation happens automatically within a process, following control flow for threads and asynchronous coroutines. The context is a dictionary-like object. [1, 2]"},"warnings":[{"fix":"Plan a migration to OpenTelemetry. Official bridge libraries are available for Python to help with incremental migration. Be aware of potential breaking changes due to semantic conventions, data model differences, and API feature differences. [3, 8, 9, 11]","message":"OpenCensus has officially merged with OpenTracing to form OpenTelemetry, which is considered the next major version. Users are strongly encouraged to migrate to OpenTelemetry for active development, new features, and continued support. Most OpenCensus GitHub repositories (except `opencensus-python`) were archived on July 31st, 2023. [3, 9, 10, 12]","severity":"breaking","affected_versions":"<=0.1.3"},{"fix":"For Azure Monitor users, migrate to the Azure Monitor OpenTelemetry Distro or the Azure Monitor OpenTelemetry exporters. Note that Microsoft does not recommend or support the OpenTelemetry OpenCensus shim for Azure Monitor users. [14, 16]","message":"Azure Monitor OpenCensus exporters are on the path to deprecation and will be officially unsupported by September 2024. Users are advised to migrate to Azure Monitor OpenTelemetry Distro or exporters. [14]","severity":"deprecated","affected_versions":"<=0.1.3"},{"fix":"Ensure that your target Python version's context propagation mechanism is understood, especially when dealing with concurrent or asynchronous code. For Python < 3.6, explicit context propagation might be more frequently required in complex scenarios.","message":"`opencensus-context` uses `contextvars` for Python 3.6+ for asyncio support and thread-local storage for older Python versions (2.7, 3.4, 3.5). This might lead to unexpected behavior if not accounted for when porting code between Python versions, especially with asynchronous patterns. [1, 2]","severity":"gotcha","affected_versions":"<=0.1.3"},{"fix":"Upgrade your Python environment to 3.7 or later before attempting to migrate from OpenCensus to OpenTelemetry. If an upgrade is not feasible, OpenTelemetry solutions will not be officially supported.","message":"OpenTelemetry-based monitoring for Python officially supports Python 3.7 and later. If you are using OpenCensus with Python 2.7, 3.4, 3.5, or 3.6, you will need to upgrade your Python version to migrate to OpenTelemetry-based solutions, as these older Python versions are end-of-life and unsupported by OpenTelemetry. [16]","severity":"breaking","affected_versions":"<=0.1.3"},{"fix":"Use `RuntimeContext.set_opencensus_context('key', value)` and `RuntimeContext.get_opencensus_context('key')` to manage context variables.","message":"Attempting to access `RuntimeContext.current_context()` directly will result in an `AttributeError` because `current_context` is not a registered context slot. Context variables should be managed using `RuntimeContext.set_opencensus_context()` and `RuntimeContext.get_opencensus_context()`.","severity":"gotcha","affected_versions":"<=0.1.3"}],"env_vars":null,"last_verified":"2026-05-12T22:29:35.753Z","next_check":"2026-06-27T00:00:00.000Z","problems":[{"fix":"Ensure the library is installed using pip: `pip install opencensus-context` or `pip install opencensus` (as `opencensus-context` is usually installed with `opencensus`).","cause":"The Python interpreter cannot find the 'opencensus.context' module, typically because the 'opencensus-context' library is not installed or not accessible in the current environment.","error":"ModuleNotFoundError: No module named 'opencensus.context'"},{"fix":"Install the main OpenCensus library: `pip install opencensus`.","cause":"The core 'opencensus' library, which includes 'opencensus-context' by default, is not installed or not found by the Python interpreter.","error":"ModuleNotFoundError: No module named 'opencensus'"},{"fix":"Downgrade conflicting dependencies, for example, a common fix is to downgrade 'protobuf' to a version compatible with your 'opencensus' and related 'opencensus-ext' libraries, e.g., `pip install protobuf==3.20.3` or `pip install google-api-core==2.9.0`.","cause":"This error often occurs due to conflicts with dependency versions, particularly with 'protobuf' when used with 'opencensus-ext-azure', affecting the wider OpenCensus ecosystem which includes 'opencensus-context'.","error":"TypeError: bases must be types"},{"fix":"Try installing without `--no-binary` if it's being used. Ensure `setuptools` is up-to-date (`pip install --upgrade setuptools`). If packaging for a specific distribution, check for available source distributions or pre-built wheels.","cause":"This indicates an installation failure for `opencensus-context` (or a related OpenCensus package), often occurring with specific `pip` flags (like `--no-binary`) or in certain build environments, due to issues with package metadata generation.","error":"error: subprocess-exited-with-error × python setup.py egg_info did not run successfully. ... ModuleNotFoundError: No module named 'version'"},{"fix":"Correct the import statement to `from opencensus.common.runtime_context import RuntimeContext`.","cause":"Developers often incorrectly try to import `RuntimeContext` directly from `opencensus.context`, but it is located in the `opencensus.common.runtime_context` module.","error":"ImportError: cannot import name 'RuntimeContext' from 'opencensus.context'"}],"ecosystem":"pypi","meta_description":null,"install_score":100,"install_tag":"verified","quickstart_score":null,"quickstart_tag":null,"pypi_latest":"0.1.3","cli_name":"","install_checks":{"last_tested":"2026-05-12","tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.01,"mem_mb":0.5,"disk_size":"17.8M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.01,"mem_mb":0.5,"disk_size":"17.8M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.5,"import_time_s":0.01,"mem_mb":0.5,"disk_size":"18M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.01,"mem_mb":0.5,"disk_size":"18M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.03,"mem_mb":1.2,"disk_size":"19.7M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.03,"mem_mb":1.2,"disk_size":"19.7M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.5,"import_time_s":0.02,"mem_mb":1.2,"disk_size":"20M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.02,"mem_mb":1.2,"disk_size":"20M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.02,"mem_mb":1,"disk_size":"11.6M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.02,"mem_mb":1,"disk_size":"11.6M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.4,"import_time_s":0.02,"mem_mb":1,"disk_size":"12M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.02,"mem_mb":1,"disk_size":"12M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.02,"mem_mb":1.1,"disk_size":"11.3M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.02,"mem_mb":1.1,"disk_size":"11.2M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.4,"import_time_s":0.02,"mem_mb":0.9,"disk_size":"12M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.02,"mem_mb":0.9,"disk_size":"12M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.02,"mem_mb":0.8,"disk_size":"17.3M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.02,"mem_mb":0.8,"disk_size":"17.3M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.7,"import_time_s":0.01,"mem_mb":0.8,"disk_size":"18M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.01,"mem_mb":0.8,"disk_size":"18M"}]},"quickstart_checks":{"last_tested":"2026-04-24","tag":null,"tag_description":null,"results":[{"runtime":"python:3.10-alpine","exit_code":1},{"runtime":"python:3.10-slim","exit_code":1},{"runtime":"python:3.11-alpine","exit_code":1},{"runtime":"python:3.11-slim","exit_code":1},{"runtime":"python:3.12-alpine","exit_code":1},{"runtime":"python:3.12-slim","exit_code":1},{"runtime":"python:3.13-alpine","exit_code":1},{"runtime":"python:3.13-slim","exit_code":1},{"runtime":"python:3.9-alpine","exit_code":1},{"runtime":"python:3.9-slim","exit_code":1}]}}