diff --git a/.pylintrc b/.pylintrc
index 172a524..a8878c8 100644
--- a/.pylintrc
+++ b/.pylintrc
@@ -64,6 +64,7 @@
 # no Warning level messages displayed, use "--disable=all --enable=classes
 # --disable=W".
 disable=bad-continuation,  # Rely on yapf for formatting
+        consider-using-with,
         fixme,
         subprocess-run-check,
         raise-missing-from,
diff --git a/pw_arduino_build/py/pw_arduino_build/builder.py b/pw_arduino_build/py/pw_arduino_build/builder.py
index b19946e..2a9dcc3 100755
--- a/pw_arduino_build/py/pw_arduino_build/builder.py
+++ b/pw_arduino_build/py/pw_arduino_build/builder.py
@@ -274,43 +274,36 @@
         # TODO(tonymd): Make sure these variables are replaced in recipe lines
         # even if they are None: build_path, project_path, project_source_path,
         # build_project_name
-        for current_board_name in self.board.keys():
+        for current_board in self.board.values():
             if self.build_path:
-                self.board[current_board_name]["build.path"] = self.build_path
+                current_board["build.path"] = self.build_path
             if self.build_project_name:
-                self.board[current_board_name][
-                    "build.project_name"] = self.build_project_name
+                current_board["build.project_name"] = self.build_project_name
                 # {archive_file} is the final *.elf
                 archive_file = "{}.elf".format(self.build_project_name)
-                self.board[current_board_name]["archive_file"] = archive_file
+                current_board["archive_file"] = archive_file
                 # {archive_file_path} is the final core.a archive
                 if self.build_path:
-                    self.board[current_board_name][
-                        "archive_file_path"] = os.path.join(
-                            self.build_path, "core.a")
+                    current_board["archive_file_path"] = os.path.join(
+                        self.build_path, "core.a")
             if self.project_source_path:
-                self.board[current_board_name][
-                    "build.source.path"] = self.project_source_path
+                current_board["build.source.path"] = self.project_source_path
 
-            self.board[current_board_name]["extra.time.local"] = str(
-                int(time.time()))
-            self.board[current_board_name]["runtime.ide.version"] = "10812"
-            self.board[current_board_name][
-                "runtime.hardware.path"] = self.hardware_path
+            current_board["extra.time.local"] = str(int(time.time()))
+            current_board["runtime.ide.version"] = "10812"
+            current_board["runtime.hardware.path"] = self.hardware_path
 
             # Copy {runtime.tools.TOOL_NAME.path} vars
-            self._set_tools_variables(self.board[current_board_name])
+            self._set_tools_variables(current_board)
 
-            self.board[current_board_name][
-                "runtime.platform.path"] = self.package_path
+            current_board["runtime.platform.path"] = self.package_path
             if self.platform["name"] == "Teensyduino":
                 # Teensyduino is installed into the arduino IDE folder
                 # rather than ~/.arduino15/packages/
-                self.board[current_board_name][
-                    "runtime.hardware.path"] = os.path.join(
-                        self.hardware_path, "teensy")
+                current_board["runtime.hardware.path"] = os.path.join(
+                    self.hardware_path, "teensy")
 
-            self.board[current_board_name]["build.system.path"] = os.path.join(
+            current_board["build.system.path"] = os.path.join(
                 self.package_path, "system")
 
             # Set the {build.core.path} variable that pointing to a sub-core
@@ -319,16 +312,15 @@
             # it's typically just the 'arduino' folder. For example:
             # 'arduino-samd/hardware/samd/1.8.8/cores/arduino'
             core_path = Path(self.package_path) / "cores"
-            core_path /= self.board[current_board_name].get(
-                "build.core", self.sub_core_folders[0])
-            self.board[current_board_name][
-                "build.core.path"] = core_path.as_posix()
+            core_path /= current_board.get("build.core",
+                                           self.sub_core_folders[0])
+            current_board["build.core.path"] = core_path.as_posix()
 
-            self.board[current_board_name]["build.arch"] = self.build_arch
+            current_board["build.arch"] = self.build_arch
 
-            for name, var in self.board[current_board_name].items():
-                self.board[current_board_name][name] = var.replace(
-                    "{build.core.path}", core_path.as_posix())
+            for name, var in current_board.items():
+                current_board[name] = var.replace("{build.core.path}",
+                                                  core_path.as_posix())
 
     def load_board_definitions(self):
         """Loads Arduino boards.txt and platform.txt files into dictionaries.
@@ -363,7 +355,7 @@
                     b_match["name"]] = OrderedDict()
 
             # Get all board variables, e.g. teensy40.*
-            for current_board_name in self.board.keys():
+            for current_board_name, current_board in self.board.items():
                 board_line_matches = re.finditer(
                     fr"^\s*{current_board_name}\."
                     fr"(?P<key>[^#=]+)=(?P<value>.*)$", board_file,
@@ -375,8 +367,7 @@
                     ArduinoBuilder.save_default_menu_option(
                         current_board_name, b_match["key"], b_match["value"],
                         self.menu_options)
-                    self.board[current_board_name][
-                        b_match["key"]] = b_match["value"].strip()
+                    current_board[b_match["key"]] = b_match["value"].strip()
 
             self._set_global_arduino_variables()
 
diff --git a/pw_arduino_build/py/pw_arduino_build/core_installer.py b/pw_arduino_build/py/pw_arduino_build/core_installer.py
index bcee8fe..662f90e 100644
--- a/pw_arduino_build/py/pw_arduino_build/core_installer.py
+++ b/pw_arduino_build/py/pw_arduino_build/core_installer.py
@@ -27,7 +27,7 @@
 from pathlib import Path
 from typing import Dict, List
 
-import pw_arduino_build.file_operations as file_operations
+from pw_arduino_build import file_operations
 
 _LOG = logging.getLogger(__name__)
 
diff --git a/pw_cli/py/envparse_test.py b/pw_cli/py/envparse_test.py
index 0a6f180..dfa3c59 100644
--- a/pw_cli/py/envparse_test.py
+++ b/pw_cli/py/envparse_test.py
@@ -16,7 +16,7 @@
 import math
 import unittest
 
-import pw_cli.envparse as envparse
+from pw_cli import envparse
 
 # pylint: disable=no-member
 
diff --git a/pw_package/py/pw_package/packages/boringssl.py b/pw_package/py/pw_package/packages/boringssl.py
index f85c4d1..f791ef0 100644
--- a/pw_package/py/pw_package/packages/boringssl.py
+++ b/pw_package/py/pw_package/packages/boringssl.py
@@ -43,7 +43,7 @@
 
         # Check that necessary build files are generated.
         build_files = ['BUILD.generated.gni', 'err_data.c']
-        return all([os.path.exists(path / file) for file in build_files])
+        return all(os.path.exists(path / file) for file in build_files)
 
     def install(self, path: pathlib.Path) -> None:
         # Checkout the library
diff --git a/pw_protobuf/py/pw_protobuf/codegen_pwpb.py b/pw_protobuf/py/pw_protobuf/codegen_pwpb.py
index d103018..4e46ab6 100644
--- a/pw_protobuf/py/pw_protobuf/codegen_pwpb.py
+++ b/pw_protobuf/py/pw_protobuf/codegen_pwpb.py
@@ -21,7 +21,7 @@
 from typing import Dict, Iterable, List, Tuple
 from typing import cast
 
-import google.protobuf.descriptor_pb2 as descriptor_pb2
+from google.protobuf import descriptor_pb2
 
 from pw_protobuf.output_file import OutputFile
 from pw_protobuf.proto_tree import ProtoEnum, ProtoMessage, ProtoMessageField
diff --git a/pw_protobuf/py/pw_protobuf/plugin.py b/pw_protobuf/py/pw_protobuf/plugin.py
index 058a29d..c584a9a 100755
--- a/pw_protobuf/py/pw_protobuf/plugin.py
+++ b/pw_protobuf/py/pw_protobuf/plugin.py
@@ -20,9 +20,9 @@
 
 import sys
 
-import google.protobuf.compiler.plugin_pb2 as plugin_pb2
+from google.protobuf.compiler import plugin_pb2
 
-import pw_protobuf.codegen_pwpb as codegen_pwpb
+from pw_protobuf import codegen_pwpb
 
 
 def process_proto_request(req: plugin_pb2.CodeGeneratorRequest,
diff --git a/pw_protobuf/py/pw_protobuf/proto_tree.py b/pw_protobuf/py/pw_protobuf/proto_tree.py
index 6dedf82..676096a 100644
--- a/pw_protobuf/py/pw_protobuf/proto_tree.py
+++ b/pw_protobuf/py/pw_protobuf/proto_tree.py
@@ -20,7 +20,7 @@
 from typing import Callable, Dict, Iterator, List, Optional, Tuple, TypeVar
 from typing import cast
 
-import google.protobuf.descriptor_pb2 as descriptor_pb2
+from google.protobuf import descriptor_pb2
 
 T = TypeVar('T')  # pylint: disable=invalid-name
 
diff --git a/pw_rpc/py/pw_rpc/plugin.py b/pw_rpc/py/pw_rpc/plugin.py
index 44337d9..30d6160 100644
--- a/pw_rpc/py/pw_rpc/plugin.py
+++ b/pw_rpc/py/pw_rpc/plugin.py
@@ -16,10 +16,10 @@
 import enum
 import sys
 
-import google.protobuf.compiler.plugin_pb2 as plugin_pb2
+from google.protobuf.compiler import plugin_pb2
 
-import pw_rpc.codegen_nanopb as codegen_nanopb
-import pw_rpc.codegen_raw as codegen_raw
+from pw_rpc import codegen_nanopb
+from pw_rpc import codegen_raw
 
 
 class Codegen(enum.Enum):
diff --git a/pw_stm32cube_build/py/pw_stm32cube_build/find_files.py b/pw_stm32cube_build/py/pw_stm32cube_build/find_files.py
index b6aa016..903c05b 100644
--- a/pw_stm32cube_build/py/pw_stm32cube_build/find_files.py
+++ b/pw_stm32cube_build/py/pw_stm32cube_build/find_files.py
@@ -237,9 +237,8 @@
         'template' not in f, files)
 
     header_files = filter(
-        lambda f: (any([f.startswith(dir)
-                        for dir in _INCLUDE_DIRS])) and f.endswith('.h'),
-        files)
+        lambda f: (any(f.startswith(dir)
+                       for dir in _INCLUDE_DIRS)) and f.endswith('.h'), files)
 
     rebase_path = lambda f: str(stm32cube_path / f)
     return list(map(rebase_path,
diff --git a/pw_trace/py/pw_trace/trace.py b/pw_trace/py/pw_trace/trace.py
index c63d931..03b00c2 100755
--- a/pw_trace/py/pw_trace/trace.py
+++ b/pw_trace/py/pw_trace/trace.py
@@ -31,16 +31,21 @@
 
 
 class TraceType(Enum):
-    Invalid = 0
-    Instantaneous = 1
-    InstantaneousGroup = 2
-    AsyncStart = 3
-    AsyncStep = 4
-    AsyncEnd = 5
-    DurationStart = 6
-    DurationEnd = 7
-    DurationGroupStart = 8
-    DurationGroupEnd = 9
+    INVALID = 0
+    INSTANTANEOUS = 1
+    INSTANTANEOUS_GROUP = 2
+    ASYNC_START = 3
+    ASYNC_STEP = 4
+    ASYNC_END = 5
+    DURATION_START = 6
+    DURATION_END = 7
+    DURATION_GROUP_START = 8
+    DURATION_GROUP_END = 9
+
+    # TODO(hepler): Remove these aliases for the original style-incompliant
+    #     names when users have migrated.
+    DurationStart = 6  # pylint: disable=invalid-name
+    DurationEnd = 7  # pylint: disable=invalid-name
 
 
 class TraceEvent(NamedTuple):
@@ -78,40 +83,40 @@
             "name": (event.label),
             "ts": event.timestamp_us
         }
-        if event.event_type == TraceType.DurationStart:
+        if event.event_type == TraceType.DURATION_START:
             line["ph"] = "B"
             line["tid"] = event.label
-        elif event.event_type == TraceType.DurationEnd:
+        elif event.event_type == TraceType.DURATION_END:
             line["ph"] = "E"
             line["tid"] = event.label
-        elif event.event_type == TraceType.DurationGroupStart:
+        elif event.event_type == TraceType.DURATION_GROUP_START:
             line["ph"] = "B"
             line["tid"] = event.group
-        elif event.event_type == TraceType.DurationGroupEnd:
+        elif event.event_type == TraceType.DURATION_GROUP_END:
             line["ph"] = "E"
             line["tid"] = event.group
-        elif event.event_type == TraceType.Instantaneous:
+        elif event.event_type == TraceType.INSTANTANEOUS:
             line["ph"] = "I"
             line["s"] = "p"
-        elif event.event_type == TraceType.InstantaneousGroup:
+        elif event.event_type == TraceType.INSTANTANEOUS_GROUP:
             line["ph"] = "I"
             line["s"] = "t"
             line["tid"] = event.group
-        elif event.event_type == TraceType.AsyncStart:
+        elif event.event_type == TraceType.ASYNC_START:
             line["ph"] = "b"
             line["scope"] = event.group
             line["tid"] = event.group
             line["cat"] = event.module
             line["id"] = event.trace_id
             line["args"] = {"id": line["id"]}
-        elif event.event_type == TraceType.AsyncStep:
+        elif event.event_type == TraceType.ASYNC_STEP:
             line["ph"] = "n"
             line["scope"] = event.group
             line["tid"] = event.group
             line["cat"] = event.module
             line["id"] = event.trace_id
             line["args"] = {"id": line["id"]}
-        elif event.event_type == TraceType.AsyncEnd:
+        elif event.event_type == TraceType.ASYNC_END:
             line["ph"] = "e"
             line["scope"] = event.group
             line["tid"] = event.group
diff --git a/pw_trace/py/trace_test.py b/pw_trace/py/trace_test.py
index 889a4b1..6cd2bcc 100755
--- a/pw_trace/py/trace_test.py
+++ b/pw_trace/py/trace_test.py
@@ -21,15 +21,16 @@
 from pw_trace import trace
 
 test_events = [
-    trace.TraceEvent(trace.TraceType.Instantaneous, "m1", "L1", 1),
-    trace.TraceEvent(trace.TraceType.InstantaneousGroup, "m2", "L2", 2, "G2"),
-    trace.TraceEvent(trace.TraceType.AsyncStep, "m3", "L3", 3, "G3", 103),
-    trace.TraceEvent(trace.TraceType.DurationStart, "m4", "L4", 4),
-    trace.TraceEvent(trace.TraceType.DurationGroupStart, "m5", "L5", 5, "G5"),
-    trace.TraceEvent(trace.TraceType.AsyncStart, "m6", "L6", 6, "G6", 106),
-    trace.TraceEvent(trace.TraceType.DurationEnd, "m7", "L7", 7),
-    trace.TraceEvent(trace.TraceType.DurationGroupEnd, "m8", "L8", 8, "G8"),
-    trace.TraceEvent(trace.TraceType.AsyncEnd, "m9", "L9", 9, "G9", 109)
+    trace.TraceEvent(trace.TraceType.INSTANTANEOUS, "m1", "L1", 1),
+    trace.TraceEvent(trace.TraceType.INSTANTANEOUS_GROUP, "m2", "L2", 2, "G2"),
+    trace.TraceEvent(trace.TraceType.ASYNC_STEP, "m3", "L3", 3, "G3", 103),
+    trace.TraceEvent(trace.TraceType.DURATION_START, "m4", "L4", 4),
+    trace.TraceEvent(trace.TraceType.DURATION_GROUP_START, "m5", "L5", 5,
+                     "G5"),
+    trace.TraceEvent(trace.TraceType.ASYNC_START, "m6", "L6", 6, "G6", 106),
+    trace.TraceEvent(trace.TraceType.DURATION_END, "m7", "L7", 7),
+    trace.TraceEvent(trace.TraceType.DURATION_GROUP_END, "m8", "L8", 8, "G8"),
+    trace.TraceEvent(trace.TraceType.ASYNC_END, "m9", "L9", 9, "G9", 109)
 ]
 
 test_json = [
@@ -51,7 +52,7 @@
 class TestTraceGenerateJson(unittest.TestCase):
     """Tests generate json with various events."""
     def test_generate_single_json_event(self):
-        event = trace.TraceEvent(event_type=trace.TraceType.Instantaneous,
+        event = trace.TraceEvent(event_type=trace.TraceType.INSTANTANEOUS,
                                  module="module",
                                  label="label",
                                  timestamp_us=10)
@@ -73,7 +74,7 @@
 
     def test_generate_json_data_arg_label(self):
         event = trace.TraceEvent(
-            event_type=trace.TraceType.Instantaneous,
+            event_type=trace.TraceType.INSTANTANEOUS,
             module="module",
             label="",  # Is replaced by data string
             timestamp_us=10,
@@ -91,13 +92,14 @@
         })
 
     def test_generate_json_data_arg_group(self):
-        event = trace.TraceEvent(event_type=trace.TraceType.InstantaneousGroup,
-                                 module="module",
-                                 label="label",
-                                 timestamp_us=10,
-                                 has_data=True,
-                                 data_fmt="@pw_arg_group",
-                                 data=bytes("arg", "utf-8"))
+        event = trace.TraceEvent(
+            event_type=trace.TraceType.INSTANTANEOUS_GROUP,
+            module="module",
+            label="label",
+            timestamp_us=10,
+            has_data=True,
+            data_fmt="@pw_arg_group",
+            data=bytes("arg", "utf-8"))
         json_lines = trace.generate_trace_json([event])
         self.assertEqual(1, len(json_lines))
         self.assertEqual(
@@ -111,7 +113,7 @@
             })
 
     def test_generate_json_data_counter(self):
-        event = trace.TraceEvent(event_type=trace.TraceType.Instantaneous,
+        event = trace.TraceEvent(event_type=trace.TraceType.INSTANTANEOUS,
                                  module="module",
                                  label="counter",
                                  timestamp_us=10,
@@ -133,7 +135,7 @@
             })
 
     def test_generate_json_data_struct_fmt_single(self):
-        event = trace.TraceEvent(event_type=trace.TraceType.Instantaneous,
+        event = trace.TraceEvent(event_type=trace.TraceType.INSTANTANEOUS,
                                  module="module",
                                  label="counter",
                                  timestamp_us=10,
@@ -155,7 +157,7 @@
             })
 
     def test_generate_json_data_struct_fmt_multi(self):
-        event = trace.TraceEvent(event_type=trace.TraceType.Instantaneous,
+        event = trace.TraceEvent(event_type=trace.TraceType.INSTANTANEOUS,
                                  module="module",
                                  label="counter",
                                  timestamp_us=10,
diff --git a/pw_trace_tokenized/py/pw_trace_tokenized/trace_tokenized.py b/pw_trace_tokenized/py/pw_trace_tokenized/trace_tokenized.py
index fd16b3c..8b23617 100755
--- a/pw_trace_tokenized/py/pw_trace_tokenized/trace_tokenized.py
+++ b/pw_trace_tokenized/py/pw_trace_tokenized/trace_tokenized.py
@@ -48,60 +48,60 @@
     return None
 
 
-# Token string: "event_type|flag|module|group|label|<optional data_fmt>"
+# Token string: "event_type|flag|module|group|label|<optional DATA_FMT>"
 class TokenIdx(IntEnum):
-    EventType = 0
-    Flag = 1
-    Module = 2
-    Group = 3
-    Label = 4
-    data_fmt = 5  # optional
+    EVENT_TYPE = 0
+    FLAG = 1
+    MODULE = 2
+    GROUP = 3
+    LABEL = 4
+    DATA_FMT = 5  # optional
 
 
 def get_trace_type(type_str):
     if type_str == "PW_TRACE_EVENT_TYPE_INSTANT":
-        return trace.TraceType.Instantaneous
+        return trace.TraceType.INSTANTANEOUS
     if type_str == "PW_TRACE_EVENT_TYPE_INSTANT_GROUP":
-        return trace.TraceType.InstantaneousGroup
+        return trace.TraceType.INSTANTANEOUS_GROUP
     if type_str == "PW_TRACE_EVENT_TYPE_ASYNC_START":
-        return trace.TraceType.AsyncStart
+        return trace.TraceType.ASYNC_START
     if type_str == "PW_TRACE_EVENT_TYPE_ASYNC_STEP":
-        return trace.TraceType.AsyncStep
+        return trace.TraceType.ASYNC_STEP
     if type_str == "PW_TRACE_EVENT_TYPE_ASYNC_END":
-        return trace.TraceType.AsyncEnd
+        return trace.TraceType.ASYNC_END
     if type_str == "PW_TRACE_EVENT_TYPE_DURATION_START":
-        return trace.TraceType.DurationStart
+        return trace.TraceType.DURATION_START
     if type_str == "PW_TRACE_EVENT_TYPE_DURATION_END":
-        return trace.TraceType.DurationEnd
+        return trace.TraceType.DURATION_END
     if type_str == "PW_TRACE_EVENT_TYPE_DURATION_GROUP_START":
-        return trace.TraceType.DurationGroupStart
+        return trace.TraceType.DURATION_GROUP_START
     if type_str == "PW_TRACE_EVENT_TYPE_DURATION_GROUP_END":
-        return trace.TraceType.DurationGroupEnd
-    return trace.TraceType.Invalid
+        return trace.TraceType.DURATION_GROUP_END
+    return trace.TraceType.INVALID
 
 
 def has_trace_id(token_string):
     token_values = token_string.split("|")
-    return trace.event_has_trace_id(token_values[TokenIdx.EventType])
+    return trace.event_has_trace_id(token_values[TokenIdx.EVENT_TYPE])
 
 
 def has_data(token_string):
     token_values = token_string.split("|")
-    return len(token_values) > TokenIdx.data_fmt
+    return len(token_values) > TokenIdx.DATA_FMT
 
 
 def create_trace_event(token_string, timestamp_us, trace_id, data):
     token_values = token_string.split("|")
     return trace.TraceEvent(event_type=get_trace_type(
-        token_values[TokenIdx.EventType]),
-                            module=token_values[TokenIdx.Module],
-                            label=token_values[TokenIdx.Label],
+        token_values[TokenIdx.EVENT_TYPE]),
+                            module=token_values[TokenIdx.MODULE],
+                            label=token_values[TokenIdx.LABEL],
                             timestamp_us=timestamp_us,
-                            group=token_values[TokenIdx.Group],
+                            group=token_values[TokenIdx.GROUP],
                             trace_id=trace_id,
-                            flags=token_values[TokenIdx.Flag],
+                            flags=token_values[TokenIdx.FLAG],
                             has_data=has_data(token_string),
-                            data_fmt=(token_values[TokenIdx.data_fmt]
+                            data_fmt=(token_values[TokenIdx.DATA_FMT]
                                       if has_data(token_string) else ""),
                             data=data if has_data(token_string) else b'')
 
