diff --git a/runtime/bindings/python/CMakeLists.txt b/runtime/bindings/python/CMakeLists.txt
index 714aa53..1f8b5aa 100644
--- a/runtime/bindings/python/CMakeLists.txt
+++ b/runtime/bindings/python/CMakeLists.txt
@@ -49,7 +49,6 @@
   DEPS
     iree::base
     iree::base::internal::flags
-    iree::base::tracing
     iree::hal
     iree::hal::drivers
     iree::hal::utils::allocators
diff --git a/runtime/bindings/python/hal.cc b/runtime/bindings/python/hal.cc
index 6f51450..accae92 100644
--- a/runtime/bindings/python/hal.cc
+++ b/runtime/bindings/python/hal.cc
@@ -8,7 +8,6 @@
 
 #include "./vm.h"
 #include "iree/base/internal/path.h"
-#include "iree/base/tracing.h"
 #include "iree/hal/api.h"
 #include "iree/hal/utils/allocators.h"
 #include "iree/modules/hal/module.h"
@@ -84,7 +83,7 @@
 py::object HalAllocator::AllocateBufferCopy(
     int memory_type, int allowed_usage, py::object buffer,
     std::optional<iree_hal_element_types_t> element_type) {
-  IREE_TRACE_SCOPE0("HalAllocator::AllocateBufferCopy");
+  IREE_TRACE_SCOPE_NAMED("HalAllocator::AllocateBufferCopy");
   // Request a view of the buffer (use the raw python C API to avoid
   // some allocation and copying at the pybind level).
   Py_buffer py_view;
diff --git a/runtime/bindings/python/invoke.cc b/runtime/bindings/python/invoke.cc
index eb11c4d..c3b5df1 100644
--- a/runtime/bindings/python/invoke.cc
+++ b/runtime/bindings/python/invoke.cc
@@ -9,7 +9,6 @@
 #include "./hal.h"
 #include "./vm.h"
 #include "iree/base/api.h"
-#include "iree/base/tracing.h"
 #include "iree/hal/api.h"
 #include "iree/modules/hal/module.h"
 #include "iree/vm/api.h"
@@ -163,22 +162,22 @@
                 abi_shape = std::move(abi_shape)](InvokeContext &c,
                                                   iree_vm_list_t *list,
                                                   py::handle py_value) {
-          IREE_TRACE_SCOPE0("ArgumentPacker::ReflectionNdarray");
+          IREE_TRACE_SCOPE_NAMED("ArgumentPacker::ReflectionNdarray");
           HalBufferView *bv = nullptr;
           py::object retained_bv;
           if (py::isinstance(py_value, device_array_type())) {
             // Short-circuit: If a DeviceArray is provided, assume it is
             // correct.
-            IREE_TRACE_SCOPE0("PackDeviceArray");
+            IREE_TRACE_SCOPE_NAMED("PackDeviceArray");
             bv = py::cast<HalBufferView *>(py_value.attr(kAttrBufferView));
           } else if (py::isinstance(py_value, hal_buffer_view_type())) {
             // Short-circuit: If a HalBufferView is provided directly.
-            IREE_TRACE_SCOPE0("PackBufferView");
+            IREE_TRACE_SCOPE_NAMED("PackBufferView");
             bv = py::cast<HalBufferView *>(py_value);
           } else {
             // Fall back to the array protocol to generate a host side
             // array and then convert that.
-            IREE_TRACE_SCOPE0("PackHostArray");
+            IREE_TRACE_SCOPE_NAMED("PackHostArray");
             py::object host_array;
             try {
               host_array = numpy_module().attr(kAsArray)(py_value, target_dtype,
@@ -380,7 +379,7 @@
  private:
   PackCallback GetGenericPackCallbackForNdarray() {
     return [this](InvokeContext &c, iree_vm_list_t *list, py::handle py_value) {
-      IREE_TRACE_SCOPE0("ArgumentPacker::GenericNdarray");
+      IREE_TRACE_SCOPE_NAMED("ArgumentPacker::GenericNdarray");
       py::object host_array;
       try {
         host_array = numpy_module().attr(kAsArray)(
@@ -550,7 +549,7 @@
  public:
   ArgumentPacker(InvokeStatics &statics, std::optional<py::list> arg_descs)
       : statics_(statics) {
-    IREE_TRACE_SCOPE0("ArgumentPacker::Init");
+    IREE_TRACE_SCOPE_NAMED("ArgumentPacker::Init");
     if (!arg_descs) {
       dynamic_dispatch_ = true;
     } else {
@@ -594,7 +593,7 @@
                      py::dict kw_args) {
     // Dynamic dispatch.
     if (dynamic_dispatch_) {
-      IREE_TRACE_SCOPE0("ArgumentPacker::PackDynamic");
+      IREE_TRACE_SCOPE_NAMED("ArgumentPacker::PackDynamic");
       if (!kw_args.empty()) {
         throw std::invalid_argument(
             "kwargs not supported for dynamic dispatch functions");
@@ -614,7 +613,7 @@
       }
       return arg_list;
     } else {
-      IREE_TRACE_SCOPE0("ArgumentPacker::PackReflection");
+      IREE_TRACE_SCOPE_NAMED("ArgumentPacker::PackReflection");
 
       // Reflection based dispatch.
       std::vector<py::handle> py_args(flat_arg_packers_.size());
diff --git a/runtime/bindings/python/vm.cc b/runtime/bindings/python/vm.cc
index 455bd3f..b72ecde 100644
--- a/runtime/bindings/python/vm.cc
+++ b/runtime/bindings/python/vm.cc
@@ -8,7 +8,6 @@
 
 #include "./status_utils.h"
 #include "iree/base/api.h"
-#include "iree/base/tracing.h"
 // TODO: We shouldn't need the HAL API but it is used for direct printing
 // summaries of HAL objects in lists. We should have a better way of doing this
 // dynamically vs hard depending on a type switch here.
@@ -57,7 +56,7 @@
 //------------------------------------------------------------------------------
 
 VmInstance VmInstance::Create() {
-  IREE_TRACE_SCOPE0("VmInstance::Create");
+  IREE_TRACE_SCOPE_NAMED("VmInstance::Create");
 
   iree_vm_instance_t* instance = NULL;
   auto status = iree_vm_instance_create(IREE_VM_TYPE_CAPACITY_DEFAULT,
@@ -79,7 +78,7 @@
 
 VmContext VmContext::Create(VmInstance* instance,
                             std::optional<std::vector<VmModule*>> modules) {
-  IREE_TRACE_SCOPE0("VmContext::Create");
+  IREE_TRACE_SCOPE_NAMED("VmContext::Create");
   iree_vm_context_t* context;
   if (!modules) {
     // Simple create with open allowed modules.
@@ -134,7 +133,7 @@
 VmModule VmModule::ResolveModuleDependency(VmInstance* instance,
                                            const std::string& name,
                                            uint32_t minimum_version) {
-  IREE_TRACE_SCOPE0("VmModule::ResolveModuleDependency");
+  IREE_TRACE_SCOPE_NAMED("VmModule::ResolveModuleDependency");
   iree_vm_module_t* module = nullptr;
 
   iree_vm_module_dependency_t dependency = {
@@ -153,7 +152,7 @@
 
 VmModule VmModule::FromFlatbufferBlob(VmInstance* instance,
                                       py::object flatbuffer_blob_object) {
-  IREE_TRACE_SCOPE0("VmModule::FromFlatbufferBlob");
+  IREE_TRACE_SCOPE_NAMED("VmModule::FromFlatbufferBlob");
   auto flatbuffer_blob = py::cast<py::buffer>(flatbuffer_blob_object);
   auto buffer_info = flatbuffer_blob.request();
   iree_vm_module_t* module = nullptr;
