Prepare to reorganize upb file structure

I am getting ready to move almost everything under the upb/ directory up one
level to integrate upb better into its new location in the protobuf repo. This
change makes a few tweaks to prepare for that:
- Delete upb's LICENSE and CONTRIBUTING.md files since we already have similar
  files at the top level.
- Rename `//python:python_version` so that it won't conflict later with
  `//upb/python:python_version`.
- Move the contents of python/BUILD.bazel out to a Bazel macro to facilitate
  merging that BUILD.bazel file with upb/python/BUILD.

PiperOrigin-RevId: 567119840
diff --git a/.github/workflows/test_python.yml b/.github/workflows/test_python.yml
index 15ea473..f1b94a5 100644
--- a/.github/workflows/test_python.yml
+++ b/.github/workflows/test_python.yml
@@ -20,10 +20,10 @@
         version: [ "3.7", "3.8", "3.9", "3.10" ]
         include:
           - type: Pure
-            targets: //python/... //upb/python/... //python:python_version
+            targets: //python/... //upb/python/... //python:python_version_test
             flags: --define=use_fast_cpp_protos=false
           - type: C++
-            targets: //python/... //python:python_version
+            targets: //python/... //python:python_version_test
             flags: --define=use_fast_cpp_protos=true
           - type: C++
             version: aarch64
@@ -57,9 +57,9 @@
         version: [ "3.10" ]
         include:
           - type: Pure
-            targets: //python/... //upb/python/... //python:python_version
+            targets: //python/... //upb/python/... //python:python_version_test
           - type: C++
-            targets: //python/... //python:python_version
+            targets: //python/... //python:python_version_test
             flags: --define=use_fast_cpp_protos=true
 
     name: MacOS ${{ matrix.type }} ${{ matrix.version }}
diff --git a/python/BUILD.bazel b/python/BUILD.bazel
index 45fedf1..b42d0b2 100644
--- a/python/BUILD.bazel
+++ b/python/BUILD.bazel
@@ -1,467 +1,6 @@
-# Protobuf Python runtime
-#
-# See also code generation logic under /src/google/protobuf/compiler/python.
-#
-# Most users should depend upon public aliases in the root:
-#   //:protobuf_python
-#   //:well_known_types_py_pb2
+load("//python:build_targets.bzl", "build_targets")
 
-load("@rules_pkg//:mappings.bzl", "pkg_files", "strip_prefix")
-load("@rules_python//python:defs.bzl", "py_library")
-load("//:protobuf.bzl", "internal_py_proto_library")
-load("//build_defs:arch_tests.bzl", "aarch64_test", "x86_64_test")
-load("//build_defs:cpp_opts.bzl", "COPTS")
-load("//conformance:defs.bzl", "conformance_test")
-load(":internal.bzl", "internal_copy_files", "internal_py_test")
-
-py_library(
-    name = "protobuf_python",
-    data = select({
-        "//conditions:default": [],
-        ":use_fast_cpp_protos": [
-            ":google/protobuf/internal/_api_implementation.so",
-            ":google/protobuf/pyext/_message.so",
-        ],
-    }),
-    visibility = ["//:__pkg__"],
-    deps = [
-        ":python_srcs",
-        ":well_known_types_py_pb2",
-    ],
-)
-
-config_setting(
-    name = "use_fast_cpp_protos",
-    values = {
-        "define": "use_fast_cpp_protos=true",
-    },
-)
-
-internal_py_proto_library(
-    name = "well_known_types_py_pb2",
-    srcs = [":copied_wkt_proto_files"],
-    include = ".",
-    default_runtime = "",
-    protoc = "//:protoc",
-    srcs_version = "PY2AND3",
-    visibility = [
-        "//:__pkg__",
-        "//upb:__subpackages__",
-    ],
-)
-
-internal_copy_files(
-    name = "copied_wkt_proto_files",
-    srcs = [
-        "//:well_known_type_protos",
-        "//src/google/protobuf:descriptor_proto_srcs",
-        "//src/google/protobuf/compiler:plugin.proto",
-    ],
-    strip_prefix = "src",
-)
-
-cc_binary(
-    name = "google/protobuf/internal/_api_implementation.so",
-    srcs = ["google/protobuf/internal/api_implementation.cc"],
-    copts = COPTS + [
-        "-DPYTHON_PROTO2_CPP_IMPL_V2",
-    ],
-    linkshared = 1,
-    linkstatic = 1,
-    tags = [
-        # Exclude this target from wildcard expansion (//...) because it may
-        # not even be buildable. It will be built if it is needed according
-        # to :use_fast_cpp_protos.
-        # https://docs.bazel.build/versions/master/be/common-definitions.html#common-attributes
-        "manual",
-    ],
-    deps = select({
-        "//conditions:default": [],
-        ":use_fast_cpp_protos": ["//external:python_headers"],
-    }),
-)
-
-config_setting(
-    name = "allow_oversize_protos",
-    values = {
-        "define": "allow_oversize_protos=true",
-    },
-)
-
-cc_binary(
-    name = "google/protobuf/pyext/_message.so",
-    srcs = glob([
-        "google/protobuf/pyext/*.cc",
-        "google/protobuf/pyext/*.h",
-    ]),
-    copts = COPTS + [
-        "-DGOOGLE_PROTOBUF_HAS_ONEOF=1",
-    ] + select({
-        "//conditions:default": [],
-        ":allow_oversize_protos": ["-DPROTOBUF_PYTHON_ALLOW_OVERSIZE_PROTOS=1"],
-    }),
-    includes = ["."],
-    linkshared = 1,
-    linkstatic = 1,
-    tags = [
-        # Exclude this target from wildcard expansion (//...) because it may
-        # not even be buildable. It will be built if it is needed according
-        # to :use_fast_cpp_protos.
-        # https://docs.bazel.build/versions/master/be/common-definitions.html#common-attributes
-        "manual",
-    ],
-    deps = [
-        ":proto_api",
-        "//:protobuf",
-        "//src/google/protobuf:descriptor_legacy",
-    ] + select({
-        "//conditions:default": [],
-        ":use_fast_cpp_protos": ["//external:python_headers"],
-    }),
-)
-
-aarch64_test(
-    name = "aarch64_test",
-    bazel_binaries = [
-        "google/protobuf/internal/_api_implementation.so",
-        "google/protobuf/pyext/_message.so",
-    ],
-)
-
-x86_64_test(
-    name = "x86_64_test",
-    bazel_binaries = [
-        "google/protobuf/internal/_api_implementation.so",
-        "google/protobuf/pyext/_message.so",
-    ],
-)
-
-py_library(
-    name = "python_srcs",
-    srcs = glob(
-        [
-            "google/protobuf/**/*.py",
-        ],
-        exclude = [
-            "google/protobuf/internal/*_test.py",
-            "google/protobuf/internal/test_util.py",
-            "google/protobuf/internal/import_test_package/__init__.py",
-        ],
-    ),
-    imports = ["python"],
-    srcs_version = "PY2AND3",
-    visibility = [
-        "//:__pkg__",
-        "//upb:__subpackages__",
-    ],
-)
-
-py_library(
-    name = "python_test_srcs",
-    srcs = glob([
-        "google/protobuf/internal/*_test.py",
-    ]) + [
-        "google/protobuf/internal/import_test_package/__init__.py",
-        "google/protobuf/internal/test_util.py",
-        "//python/google/protobuf/internal/numpy:__init__.py",
-        "//python/google/protobuf/internal/numpy:numpy_test.py",
-    ],
-    imports = ["python"],
-    srcs_version = "PY3",
-    visibility = [
-        "//:__pkg__",
-        "//upb:__subpackages__",
-    ],
-)
-
-################################################################################
-# Tests
-################################################################################
-
-internal_copy_files(
-    name = "copied_test_proto_files",
-    testonly = 1,
-    srcs = [
-        "//:test_proto_srcs",
-        "//src/google/protobuf/util:test_proto_srcs",
-    ],
-    strip_prefix = "src",
-)
-
-internal_copy_files(
-    name = "copied_test_messages_proto2_files",
-    testonly = 1,
-    srcs = [
-        "//src/google/protobuf:test_messages_proto2.proto",
-    ],
-    strip_prefix = "src",
-)
-
-internal_copy_files(
-    name = "copied_test_messages_proto3_files",
-    testonly = 1,
-    srcs = [
-        "//src/google/protobuf:test_messages_proto3.proto",
-    ],
-    strip_prefix = "src",
-)
-
-internal_py_proto_library(
-    name = "python_common_test_protos",
-    testonly = 1,
-    srcs = [":copied_test_proto_files"],
-    include = ".",
-    default_runtime = "",
-    protoc = "//:protoc",
-    srcs_version = "PY2AND3",
-    visibility = ["//:__pkg__"],
-    deps = [":well_known_types_py_pb2"],
-)
-
-internal_py_proto_library(
-    name = "python_specific_test_protos",
-    testonly = 1,
-    srcs = glob([
-        "google/protobuf/internal/*.proto",
-        "google/protobuf/internal/import_test_package/*.proto",
-    ]),
-    include = ".",
-    default_runtime = ":protobuf_python",
-    protoc = "//:protoc",
-    srcs_version = "PY2AND3",
-    visibility = ["//:__pkg__"],
-    deps = [":python_common_test_protos"],
-)
-
-internal_py_proto_library(
-    name = "test_messages_proto2_py_proto",
-    testonly = 1,
-    srcs = [":copied_test_messages_proto2_files"],
-    include = ".",
-    default_runtime = "//:protobuf_python",
-    protoc = "//:protoc",
-    visibility = [
-        "//conformance:__pkg__",
-        "//python:__subpackages__",
-    ],
-)
-
-internal_py_proto_library(
-    name = "test_messages_proto3_py_proto",
-    testonly = 1,
-    srcs = [":copied_test_messages_proto3_files"],
-    include = ".",
-    default_runtime = "//:protobuf_python",
-    protoc = "//:protoc",
-    visibility = [
-        "//conformance:__pkg__",
-        "//python:__subpackages__",
-    ],
-    deps = [":well_known_types_py_pb2"],
-)
-
-py_library(
-    name = "python_test_lib",
-    testonly = 1,
-    srcs = [
-        "google/protobuf/internal/import_test_package/__init__.py",
-        "google/protobuf/internal/test_util.py",
-    ],
-    imports = ["python"],
-    srcs_version = "PY2AND3",
-    visibility = ["//python:__subpackages__"],
-    deps = [
-        ":protobuf_python",
-        ":python_common_test_protos",
-        ":python_specific_test_protos",
-    ],
-)
-
-internal_py_test(
-    name = "descriptor_database_test",
-    srcs = ["google/protobuf/internal/descriptor_database_test.py"],
-)
-
-internal_py_test(
-    name = "descriptor_pool_test",
-    srcs = ["google/protobuf/internal/descriptor_pool_test.py"],
-)
-
-internal_py_test(
-    name = "descriptor_test",
-    srcs = ["google/protobuf/internal/descriptor_test.py"],
-)
-
-internal_py_test(
-    name = "field_mask_test",
-    srcs = ["google/protobuf/internal/field_mask_test.py"],
-)
-
-internal_py_test(
-    name = "generator_test",
-    srcs = ["google/protobuf/internal/generator_test.py"],
-)
-
-internal_py_test(
-    name = "import_test",
-    srcs = ["google/protobuf/internal/import_test.py"],
-)
-
-internal_py_test(
-    name = "json_format_test",
-    srcs = ["google/protobuf/internal/json_format_test.py"],
-)
-
-internal_py_test(
-    name = "keywords_test",
-    srcs = ["google/protobuf/internal/keywords_test.py"],
-)
-
-internal_py_test(
-    name = "message_factory_test",
-    srcs = ["google/protobuf/internal/message_factory_test.py"],
-)
-
-internal_py_test(
-    name = "message_test",
-    srcs = ["google/protobuf/internal/message_test.py"],
-    data = ["//src/google/protobuf:testdata"],
-)
-
-internal_py_test(
-    name = "proto_builder_test",
-    srcs = ["google/protobuf/internal/proto_builder_test.py"],
-)
-
-internal_py_test(
-    name = "reflection_test",
-    srcs = ["google/protobuf/internal/reflection_test.py"],
-)
-
-internal_py_test(
-    name = "service_reflection_test",
-    srcs = ["google/protobuf/internal/service_reflection_test.py"],
-)
-
-internal_py_test(
-    name = "symbol_database_test",
-    srcs = ["google/protobuf/internal/symbol_database_test.py"],
-)
-
-internal_py_test(
-    name = "text_encoding_test",
-    srcs = ["google/protobuf/internal/text_encoding_test.py"],
-)
-
-internal_py_test(
-    name = "text_format_test",
-    srcs = ["google/protobuf/internal/text_format_test.py"],
-    data = ["//src/google/protobuf:testdata"],
-)
-
-internal_py_test(
-    name = "unknown_fields_test",
-    srcs = ["google/protobuf/internal/unknown_fields_test.py"],
-)
-
-internal_py_test(
-    name = "well_known_types_test",
-    srcs = ["google/protobuf/internal/well_known_types_test.py"],
-)
-
-internal_py_test(
-    name = "wire_format_test",
-    srcs = ["google/protobuf/internal/wire_format_test.py"],
-)
-
-cc_library(
-    name = "proto_api",
-    hdrs = ["google/protobuf/proto_api.h"],
-    visibility = ["//visibility:public"],
-    deps = [
-        "//external:python_headers",
-    ],
-)
-
-internal_py_test(
-    name = "python_version",
-    srcs = ["python_version.py"],
-)
-
-conformance_test(
-    name = "conformance_test",
-    env = {"PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION": "python"},
-    failure_list = "//conformance:failure_list_python.txt",
-    target_compatible_with = select({
-        "@system_python//:none": ["@platforms//:incompatible"],
-        ":use_fast_cpp_protos": ["@platforms//:incompatible"],
-        "//conditions:default": [],
-    }),
-    testee = "//conformance:conformance_python",
-    text_format_failure_list = "//conformance:text_format_failure_list_python.txt",
-)
-
-# Note: this requires --define=use_fast_cpp_protos=true
-conformance_test(
-    name = "conformance_test_cpp",
-    env = {"PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION": "cpp"},
-    failure_list = "//conformance:failure_list_python.txt",
-    target_compatible_with = select({
-        "@system_python//:none": ["@platforms//:incompatible"],
-        ":use_fast_cpp_protos": [],
-        "//conditions:default": ["@platforms//:incompatible"],
-    }),
-    testee = "//conformance:conformance_python",
-    text_format_failure_list = "//conformance:text_format_failure_list_python_cpp.txt",
-)
-
-################################################################################
-# Distribution files
-################################################################################
-
-pkg_files(
-    name = "python_source_files",
-    srcs = glob(
-        [
-            "google/protobuf/**/*.py",
-        ],
-        exclude = [
-            "google/protobuf/internal/*_test.py",
-            "google/protobuf/internal/test_util.py",
-            "google/protobuf/internal/import_test_package/__init__.py",
-        ],
-    ) + [
-        "README.md",
-        "google/__init__.py",
-        "setup.cfg",
-        "tox.ini",
-    ],
-    strip_prefix = "",
-    visibility = ["//upb:__subpackages__"],
-)
-
-pkg_files(
-    name = "dist_files",
-    srcs = glob([
-        "google/**/*.proto",
-        "google/**/*.py",
-        "google/protobuf/internal/*.cc",
-        "google/protobuf/pyext/*.cc",
-        "google/protobuf/pyext/*.h",
-    ]) + [
-        "BUILD.bazel",
-        "MANIFEST.in",
-        "README.md",
-        "google/protobuf/proto_api.h",
-        "google/protobuf/pyext/README",
-        "google/protobuf/python_protobuf.h",
-        "internal.bzl",
-        "python_version.py",
-        "release.sh",
-        "setup.cfg",
-        "setup.py",
-        "tox.ini",
-    ],
-    strip_prefix = strip_prefix.from_root(""),
-    visibility = ["//pkg:__pkg__"],
-)
+# The build targets for this package have been temporarily moved into a Bazel
+# macro to facilitate merging upb's Python support into this directory. Once
+# that merge is complete, we will move the build targets back here.
+build_targets(name = "python")
diff --git a/python/build_targets.bzl b/python/build_targets.bzl
new file mode 100644
index 0000000..546ef01
--- /dev/null
+++ b/python/build_targets.bzl
@@ -0,0 +1,474 @@
+# Protobuf Python runtime
+#
+# See also code generation logic under /src/google/protobuf/compiler/python.
+#
+# Most users should depend upon public aliases in the root:
+#   //:protobuf_python
+#   //:well_known_types_py_pb2
+
+load("@rules_pkg//:mappings.bzl", "pkg_files", "strip_prefix")
+load("@rules_python//python:defs.bzl", "py_library")
+load("//:protobuf.bzl", "internal_py_proto_library")
+load("//build_defs:arch_tests.bzl", "aarch64_test", "x86_64_test")
+load("//build_defs:cpp_opts.bzl", "COPTS")
+load("//conformance:defs.bzl", "conformance_test")
+load(":internal.bzl", "internal_copy_files", "internal_py_test")
+
+def build_targets(name):
+    """
+    Declares the build targets of the //python package.
+
+    Args:
+      name: unused.
+    """
+    py_library(
+        name = "protobuf_python",
+        data = select({
+            "//conditions:default": [],
+            ":use_fast_cpp_protos": [
+                ":google/protobuf/internal/_api_implementation.so",
+                ":google/protobuf/pyext/_message.so",
+            ],
+        }),
+        visibility = ["//:__pkg__"],
+        deps = [
+            ":python_srcs",
+            ":well_known_types_py_pb2",
+        ],
+    )
+
+    native.config_setting(
+        name = "use_fast_cpp_protos",
+        values = {
+            "define": "use_fast_cpp_protos=true",
+        },
+    )
+
+    internal_py_proto_library(
+        name = "well_known_types_py_pb2",
+        srcs = [":copied_wkt_proto_files"],
+        include = ".",
+        default_runtime = "",
+        protoc = "//:protoc",
+        srcs_version = "PY2AND3",
+        visibility = [
+            "//:__pkg__",
+            "//upb:__subpackages__",
+        ],
+    )
+
+    internal_copy_files(
+        name = "copied_wkt_proto_files",
+        srcs = [
+            "//:well_known_type_protos",
+            "//src/google/protobuf:descriptor_proto_srcs",
+            "//src/google/protobuf/compiler:plugin.proto",
+        ],
+        strip_prefix = "src",
+    )
+
+    native.cc_binary(
+        name = "google/protobuf/internal/_api_implementation.so",
+        srcs = ["google/protobuf/internal/api_implementation.cc"],
+        copts = COPTS + [
+            "-DPYTHON_PROTO2_CPP_IMPL_V2",
+        ],
+        linkshared = 1,
+        linkstatic = 1,
+        tags = [
+            # Exclude this target from wildcard expansion (//...) because it may
+            # not even be buildable. It will be built if it is needed according
+            # to :use_fast_cpp_protos.
+            # https://docs.bazel.build/versions/master/be/common-definitions.html#common-attributes
+            "manual",
+        ],
+        deps = select({
+            "//conditions:default": [],
+            ":use_fast_cpp_protos": ["//external:python_headers"],
+        }),
+    )
+
+    native.config_setting(
+        name = "allow_oversize_protos",
+        values = {
+            "define": "allow_oversize_protos=true",
+        },
+    )
+
+    native.cc_binary(
+        name = "google/protobuf/pyext/_message.so",
+        srcs = native.glob([
+            "google/protobuf/pyext/*.cc",
+            "google/protobuf/pyext/*.h",
+        ]),
+        copts = COPTS + [
+            "-DGOOGLE_PROTOBUF_HAS_ONEOF=1",
+        ] + select({
+            "//conditions:default": [],
+            ":allow_oversize_protos": ["-DPROTOBUF_PYTHON_ALLOW_OVERSIZE_PROTOS=1"],
+        }),
+        includes = ["."],
+        linkshared = 1,
+        linkstatic = 1,
+        tags = [
+            # Exclude this target from wildcard expansion (//...) because it may
+            # not even be buildable. It will be built if it is needed according
+            # to :use_fast_cpp_protos.
+            # https://docs.bazel.build/versions/master/be/common-definitions.html#common-attributes
+            "manual",
+        ],
+        deps = [
+            ":proto_api",
+            "//:protobuf",
+            "//src/google/protobuf:descriptor_legacy",
+        ] + select({
+            "//conditions:default": [],
+            ":use_fast_cpp_protos": ["//external:python_headers"],
+        }),
+    )
+
+    aarch64_test(
+        name = "aarch64_test",
+        bazel_binaries = [
+            "google/protobuf/internal/_api_implementation.so",
+            "google/protobuf/pyext/_message.so",
+        ],
+    )
+
+    x86_64_test(
+        name = "x86_64_test",
+        bazel_binaries = [
+            "google/protobuf/internal/_api_implementation.so",
+            "google/protobuf/pyext/_message.so",
+        ],
+    )
+
+    py_library(
+        name = "python_srcs",
+        srcs = native.glob(
+            [
+                "google/protobuf/**/*.py",
+            ],
+            exclude = [
+                "google/protobuf/internal/*_test.py",
+                "google/protobuf/internal/test_util.py",
+                "google/protobuf/internal/import_test_package/__init__.py",
+            ],
+        ),
+        imports = ["python"],
+        srcs_version = "PY2AND3",
+        visibility = [
+            "//:__pkg__",
+            "//upb:__subpackages__",
+        ],
+    )
+
+    py_library(
+        name = "python_test_srcs",
+        srcs = native.glob([
+            "google/protobuf/internal/*_test.py",
+        ]) + [
+            "google/protobuf/internal/import_test_package/__init__.py",
+            "google/protobuf/internal/test_util.py",
+            "//python/google/protobuf/internal/numpy:__init__.py",
+            "//python/google/protobuf/internal/numpy:numpy_test.py",
+        ],
+        imports = ["python"],
+        srcs_version = "PY3",
+        visibility = [
+            "//:__pkg__",
+            "//upb:__subpackages__",
+        ],
+    )
+
+    ################################################################################
+    # Tests
+    ################################################################################
+
+    internal_copy_files(
+        name = "copied_test_proto_files",
+        testonly = 1,
+        srcs = [
+            "//:test_proto_srcs",
+            "//src/google/protobuf/util:test_proto_srcs",
+        ],
+        strip_prefix = "src",
+    )
+
+    internal_copy_files(
+        name = "copied_test_messages_proto2_files",
+        testonly = 1,
+        srcs = [
+            "//src/google/protobuf:test_messages_proto2.proto",
+        ],
+        strip_prefix = "src",
+    )
+
+    internal_copy_files(
+        name = "copied_test_messages_proto3_files",
+        testonly = 1,
+        srcs = [
+            "//src/google/protobuf:test_messages_proto3.proto",
+        ],
+        strip_prefix = "src",
+    )
+
+    internal_py_proto_library(
+        name = "python_common_test_protos",
+        testonly = 1,
+        srcs = [":copied_test_proto_files"],
+        include = ".",
+        default_runtime = "",
+        protoc = "//:protoc",
+        srcs_version = "PY2AND3",
+        visibility = ["//:__pkg__"],
+        deps = [":well_known_types_py_pb2"],
+    )
+
+    internal_py_proto_library(
+        name = "python_specific_test_protos",
+        testonly = 1,
+        srcs = native.glob([
+            "google/protobuf/internal/*.proto",
+            "google/protobuf/internal/import_test_package/*.proto",
+        ]),
+        include = ".",
+        default_runtime = ":protobuf_python",
+        protoc = "//:protoc",
+        srcs_version = "PY2AND3",
+        visibility = ["//:__pkg__"],
+        deps = [":python_common_test_protos"],
+    )
+
+    internal_py_proto_library(
+        name = "test_messages_proto2_py_proto",
+        testonly = 1,
+        srcs = [":copied_test_messages_proto2_files"],
+        include = ".",
+        default_runtime = "//:protobuf_python",
+        protoc = "//:protoc",
+        visibility = [
+            "//conformance:__pkg__",
+            "//python:__subpackages__",
+        ],
+    )
+
+    internal_py_proto_library(
+        name = "test_messages_proto3_py_proto",
+        testonly = 1,
+        srcs = [":copied_test_messages_proto3_files"],
+        include = ".",
+        default_runtime = "//:protobuf_python",
+        protoc = "//:protoc",
+        visibility = [
+            "//conformance:__pkg__",
+            "//python:__subpackages__",
+        ],
+        deps = [":well_known_types_py_pb2"],
+    )
+
+    py_library(
+        name = "python_test_lib",
+        testonly = 1,
+        srcs = [
+            "google/protobuf/internal/import_test_package/__init__.py",
+            "google/protobuf/internal/test_util.py",
+        ],
+        imports = ["python"],
+        srcs_version = "PY2AND3",
+        visibility = ["//python:__subpackages__"],
+        deps = [
+            ":protobuf_python",
+            ":python_common_test_protos",
+            ":python_specific_test_protos",
+        ],
+    )
+
+    internal_py_test(
+        name = "descriptor_database_test",
+        srcs = ["google/protobuf/internal/descriptor_database_test.py"],
+    )
+
+    internal_py_test(
+        name = "descriptor_pool_test",
+        srcs = ["google/protobuf/internal/descriptor_pool_test.py"],
+    )
+
+    internal_py_test(
+        name = "descriptor_test",
+        srcs = ["google/protobuf/internal/descriptor_test.py"],
+    )
+
+    internal_py_test(
+        name = "field_mask_test",
+        srcs = ["google/protobuf/internal/field_mask_test.py"],
+    )
+
+    internal_py_test(
+        name = "generator_test",
+        srcs = ["google/protobuf/internal/generator_test.py"],
+    )
+
+    internal_py_test(
+        name = "import_test",
+        srcs = ["google/protobuf/internal/import_test.py"],
+    )
+
+    internal_py_test(
+        name = "json_format_test",
+        srcs = ["google/protobuf/internal/json_format_test.py"],
+    )
+
+    internal_py_test(
+        name = "keywords_test",
+        srcs = ["google/protobuf/internal/keywords_test.py"],
+    )
+
+    internal_py_test(
+        name = "message_factory_test",
+        srcs = ["google/protobuf/internal/message_factory_test.py"],
+    )
+
+    internal_py_test(
+        name = "message_test",
+        srcs = ["google/protobuf/internal/message_test.py"],
+        data = ["//src/google/protobuf:testdata"],
+    )
+
+    internal_py_test(
+        name = "proto_builder_test",
+        srcs = ["google/protobuf/internal/proto_builder_test.py"],
+    )
+
+    internal_py_test(
+        name = "reflection_test",
+        srcs = ["google/protobuf/internal/reflection_test.py"],
+    )
+
+    internal_py_test(
+        name = "service_reflection_test",
+        srcs = ["google/protobuf/internal/service_reflection_test.py"],
+    )
+
+    internal_py_test(
+        name = "symbol_database_test",
+        srcs = ["google/protobuf/internal/symbol_database_test.py"],
+    )
+
+    internal_py_test(
+        name = "text_encoding_test",
+        srcs = ["google/protobuf/internal/text_encoding_test.py"],
+    )
+
+    internal_py_test(
+        name = "text_format_test",
+        srcs = ["google/protobuf/internal/text_format_test.py"],
+        data = ["//src/google/protobuf:testdata"],
+    )
+
+    internal_py_test(
+        name = "unknown_fields_test",
+        srcs = ["google/protobuf/internal/unknown_fields_test.py"],
+    )
+
+    internal_py_test(
+        name = "well_known_types_test",
+        srcs = ["google/protobuf/internal/well_known_types_test.py"],
+    )
+
+    internal_py_test(
+        name = "wire_format_test",
+        srcs = ["google/protobuf/internal/wire_format_test.py"],
+    )
+
+    native.cc_library(
+        name = "proto_api",
+        hdrs = ["google/protobuf/proto_api.h"],
+        visibility = ["//visibility:public"],
+        deps = [
+            "//external:python_headers",
+        ],
+    )
+
+    internal_py_test(
+        name = "python_version_test",
+        srcs = ["python_version_test.py"],
+    )
+
+    conformance_test(
+        name = "conformance_test",
+        env = {"PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION": "python"},
+        failure_list = "//conformance:failure_list_python.txt",
+        target_compatible_with = select({
+            "@system_python//:none": ["@platforms//:incompatible"],
+            ":use_fast_cpp_protos": ["@platforms//:incompatible"],
+            "//conditions:default": [],
+        }),
+        testee = "//conformance:conformance_python",
+        text_format_failure_list = "//conformance:text_format_failure_list_python.txt",
+    )
+
+    # Note: this requires --define=use_fast_cpp_protos=true
+    conformance_test(
+        name = "conformance_test_cpp",
+        env = {"PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION": "cpp"},
+        failure_list = "//conformance:failure_list_python.txt",
+        target_compatible_with = select({
+            "@system_python//:none": ["@platforms//:incompatible"],
+            ":use_fast_cpp_protos": [],
+            "//conditions:default": ["@platforms//:incompatible"],
+        }),
+        testee = "//conformance:conformance_python",
+        text_format_failure_list = "//conformance:text_format_failure_list_python_cpp.txt",
+    )
+
+    ################################################################################
+    # Distribution files
+    ################################################################################
+
+    pkg_files(
+        name = "python_source_files",
+        srcs = native.glob(
+            [
+                "google/protobuf/**/*.py",
+            ],
+            exclude = [
+                "google/protobuf/internal/*_test.py",
+                "google/protobuf/internal/test_util.py",
+                "google/protobuf/internal/import_test_package/__init__.py",
+            ],
+        ) + [
+            "README.md",
+            "google/__init__.py",
+            "setup.cfg",
+            "tox.ini",
+        ],
+        strip_prefix = "",
+        visibility = ["//upb:__subpackages__"],
+    )
+
+    pkg_files(
+        name = "dist_files",
+        srcs = native.glob([
+            "google/**/*.proto",
+            "google/**/*.py",
+            "google/protobuf/internal/*.cc",
+            "google/protobuf/pyext/*.cc",
+            "google/protobuf/pyext/*.h",
+        ]) + [
+            "BUILD.bazel",
+            "MANIFEST.in",
+            "README.md",
+            "google/protobuf/proto_api.h",
+            "google/protobuf/pyext/README",
+            "google/protobuf/python_protobuf.h",
+            "internal.bzl",
+            "python_version_test.py",
+            "release.sh",
+            "setup.cfg",
+            "setup.py",
+            "tox.ini",
+        ],
+        strip_prefix = strip_prefix.from_root(""),
+        visibility = ["//pkg:__pkg__"],
+    )
diff --git a/python/python_version.py b/python/python_version_test.py
similarity index 100%
rename from python/python_version.py
rename to python/python_version_test.py
diff --git a/upb/CONTRIBUTING.md b/upb/CONTRIBUTING.md
deleted file mode 100644
index df48bf6..0000000
--- a/upb/CONTRIBUTING.md
+++ /dev/null
@@ -1,37 +0,0 @@
-
-# How to Contribute
-
-We'd love to accept your patches and contributions to this project. There are
-just a few small guidelines you need to follow.
-
-## Get in touch
-
-If your idea will take you more than, say, 30 minutes to
-implement, please get in touch first via the issue tracker
-to touch base about your plan.  That will give an
-opportunity for early feedback and help avoid wasting your
-time.
-
-## Contributor License Agreement
-
-Contributions to this project must be accompanied by a Contributor License
-Agreement. You (or your employer) retain the copyright to your contribution;
-this simply gives us permission to use and redistribute your contributions as
-part of the project. Head over to <https://cla.developers.google.com/> to see
-your current agreements on file or to sign a new one.
-
-You generally only need to submit a CLA once, so if you've already submitted one
-(even if it was for a different project), you probably don't need to do it
-again.
-
-## Code Reviews
-
-All submissions, including submissions by project members, require review. We
-use GitHub pull requests for this purpose. Consult
-[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more
-information on using pull requests.
-
-## Community Guidelines
-
-This project follows [Google's Open Source Community
-Guidelines](https://opensource.google/conduct/).
diff --git a/upb/LICENSE b/upb/LICENSE
deleted file mode 100644
index 7f3bd16..0000000
--- a/upb/LICENSE
+++ /dev/null
@@ -1,26 +0,0 @@
-
-Copyright (c) 2009-2021, Google LLC
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in the
-      documentation and/or other materials provided with the distribution.
-    * Neither the name of Google LLC nor the names of any other
-      contributors may be used to endorse or promote products
-      derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY GOOGLE INC. ``AS IS'' AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-EVENT SHALL GOOGLE LLC BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
-IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
diff --git a/upb/python/dist/BUILD.bazel b/upb/python/dist/BUILD.bazel
index e91062b..978c6eb 100644
--- a/upb/python/dist/BUILD.bazel
+++ b/upb/python/dist/BUILD.bazel
@@ -5,14 +5,14 @@
 # license that can be found in the LICENSE file or at
 # https://developers.google.com/open-source/licenses/bsd
 
-load("//upb/bazel:py_proto_library.bzl", "py_proto_library")
-load(":dist.bzl", "py_dist", "py_dist_module")
-load("@bazel_skylib//lib:selects.bzl", "selects")
-load("//:protobuf_version.bzl", "PROTOBUF_PYTHON_VERSION")
 load("@rules_pkg//:mappings.bzl", "pkg_files", "strip_prefix")
 load("@rules_pkg//:pkg.bzl", "pkg_tar")
 load("@rules_python//python:packaging.bzl", "py_wheel")
 load("@system_python//:version.bzl", "SYSTEM_PYTHON_VERSION")
+load("//:protobuf_version.bzl", "PROTOBUF_PYTHON_VERSION")
+load("@bazel_skylib//lib:selects.bzl", "selects")
+load("//upb/bazel:py_proto_library.bzl", "py_proto_library")
+load(":dist.bzl", "py_dist", "py_dist_module")
 
 licenses(["notice"])
 
@@ -233,7 +233,7 @@
 pkg_files(
     name = "filegroup_source_files",
     srcs = [
-        "//upb:LICENSE",
+        "//:LICENSE",
         "//upb:source_files",
         "//upb/python:message_srcs",
         "//upb/upb/base:source_files",
@@ -312,7 +312,7 @@
     ],
     distribution = "protobuf",
     extra_distinfo_files = {
-        "//upb:LICENSE": "LICENSE",
+        "//:LICENSE": "LICENSE",
     },
     homepage = "https://developers.google.com/protocol-buffers/",
     license = "3-Clause BSD License",
@@ -368,7 +368,7 @@
     ],
     distribution = "protobuf",
     extra_distinfo_files = {
-        "//upb:LICENSE": "LICENSE",
+        "//:LICENSE": "LICENSE",
     },
     homepage = "https://developers.google.com/protocol-buffers/",
     license = "3-Clause BSD License",
@@ -397,7 +397,7 @@
     abi = "none",
     distribution = "protobuftests",
     extra_distinfo_files = {
-        "//upb:LICENSE": "LICENSE",
+        "//:LICENSE": "LICENSE",
     },
     platform = "any",
     python_tag = "py3",