pw_presubmit: Initialize packages

The presubmit pre-push hook runs pigweed_presubmit.py directly instead
of running 'pw presubmit'. This means it doesn't initialize all the
commands configured for 'pw', like 'package', which loads
pigweed_presubmit.py, which really only makes sure packages are
registered with package_manager.py and then defers to it. Since running
pigweed_presubmit.py directly bypasses this step when it attempts to
install packages it doesn't find any. This makes sure that any use of
pigweed_presubmit.py also loads pigweed_packages.py, so packages can be
found.

Also changing these packages to not register themselves on import. When
adding a package it now needs to be imported and added to
pigweed_packages.initialize().

Change-Id: I1e89f2a6e5cf0ab508d35becbcd4cedc8be5261e
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/27821
Commit-Queue: Auto-Submit <auto-submit@pigweed.google.com.iam.gserviceaccount.com>
Reviewed-by: Wyatt Hepler <hepler@google.com>
Pigweed-Auto-Submit: Rob Mohr <mohrr@google.com>
diff --git a/pw_package/py/pw_package/packages/nanopb.py b/pw_package/py/pw_package/packages/nanopb.py
index 800ad29..c582c76 100644
--- a/pw_package/py/pw_package/packages/nanopb.py
+++ b/pw_package/py/pw_package/packages/nanopb.py
@@ -35,6 +35,3 @@
             "Enable by running 'gn args out' and adding this line:",
             f'  dir_pw_third_party_nanopb = "{path}"',
         )
-
-
-pw_package.package_manager.register(NanoPB)
diff --git a/pw_package/py/pw_package/pigweed_packages.py b/pw_package/py/pw_package/pigweed_packages.py
index 734b6d7..3cca0ad 100644
--- a/pw_package/py/pw_package/pigweed_packages.py
+++ b/pw_package/py/pw_package/pigweed_packages.py
@@ -16,12 +16,15 @@
 import sys
 
 from pw_package import package_manager
-# These modules register themselves so must be imported despite appearing
-# unused.
-from pw_package.packages import nanopb  # pylint: disable=unused-import
+from pw_package.packages import nanopb
+
+
+def initialize():
+    package_manager.register(nanopb.NanoPB)
 
 
 def main(argv=None) -> int:
+    initialize()
     return package_manager.run(**vars(package_manager.parse_args(argv)))
 
 
diff --git a/pw_presubmit/py/pw_presubmit/pigweed_presubmit.py b/pw_presubmit/py/pw_presubmit/pigweed_presubmit.py
index f8beb47..b31a315 100755
--- a/pw_presubmit/py/pw_presubmit/pigweed_presubmit.py
+++ b/pw_presubmit/py/pw_presubmit/pigweed_presubmit.py
@@ -32,6 +32,8 @@
         os.path.abspath(__file__))))
     import pw_presubmit
 
+import pw_package.pigweed_packages
+
 from pw_presubmit import build, cli, environment, format_code, git_repo
 from pw_presubmit import call, filter_paths, plural, PresubmitContext
 from pw_presubmit import PresubmitFailure, Programs
@@ -39,6 +41,8 @@
 
 _LOG = logging.getLogger(__name__)
 
+pw_package.pigweed_packages.initialize()
+
 
 #
 # Initialization