feat(bzlmod): Allow bzlmod pip.parse to reference the default python toolchain and interpreter (#1303)

This commit defaults `the pip.parse` `python_version` attribute to the
default version of
Python, as configured by the `python.toolchain` extension. This allows a
user to use the
Python version set by rules_python or the root module. Also, this makes
setting the
attribute optional (as it has a default) and we automatically select the
interpreter.

Closes #1267
diff --git a/examples/bzlmod/MODULE.bazel b/examples/bzlmod/MODULE.bazel
index be9466d..df88ae8 100644
--- a/examples/bzlmod/MODULE.bazel
+++ b/examples/bzlmod/MODULE.bazel
@@ -11,6 +11,10 @@
     path = "../..",
 )
 
+# Setting python.toolchain is optional as rules_python
+# sets a toolchain for you, using the latest supported version
+# of Python.  We do recomend that you set a version here.
+
 # We next initialize the python toolchain using the extension.
 # You can set different Python versions in this block.
 python = use_extension("@rules_python//python/extensions:python.bzl", "python")
@@ -87,9 +91,10 @@
 # call.
 # Alternatively, `python_interpreter_target` can be used to directly specify
 # the Python interpreter to run to resolve dependencies.
+# Because we do not have a python_version defined here
+# pip.parse uses the python toolchain that is set as default.
 pip.parse(
     hub_name = "pip",
-    python_version = "3.9",
     requirements_lock = "//:requirements_lock_3_9.txt",
     requirements_windows = "//:requirements_windows_3_9.txt",
     # These modifications were created above and we
diff --git a/python/extensions/pip.bzl b/python/extensions/pip.bzl
index b6b8807..ca0b765 100644
--- a/python/extensions/pip.bzl
+++ b/python/extensions/pip.bzl
@@ -347,14 +347,16 @@
 """,
         ),
         "python_version": attr.string(
-            mandatory = True,
+            default = DEFAULT_PYTHON_VERSION,
             doc = """
 The Python version to use for resolving the pip dependencies. If not specified,
 then the default Python version (as set by the root module or rules_python)
 will be used.
 
 The version specified here must have a corresponding `python.toolchain()`
-configured.
+configured. This attribute defaults to the version of the toolchain
+that is set as the default Python version.  Or if only one toolchain
+is used, this attribute defaults to that version of Python.
 """,
         ),
         "whl_modifications": attr.label_keyed_string_dict(