From 1c9b48cec8d1652b81dd1914cbb92cfb145adfc6 Mon Sep 17 00:00:00 2001 From: David Zbarsky Date: Sun, 23 Nov 2025 11:24:18 -0500 Subject: [PATCH 1/4] perf: py_venv.bzl optimizations --- .bcr/patches/remove_dev_deps.patch | 8 +-- MODULE.bazel | 4 +- bazel/include/cargo.MODULE.bazel | 2 +- bazel/include/telemetry.MODULE.bazel | 2 +- py/private/py_venv/py_venv.bzl | 101 +++++++++++++++++---------- 5 files changed, 74 insertions(+), 43 deletions(-) diff --git a/.bcr/patches/remove_dev_deps.patch b/.bcr/patches/remove_dev_deps.patch index 3d6f30ce..2981dd0f 100644 --- a/.bcr/patches/remove_dev_deps.patch +++ b/.bcr/patches/remove_dev_deps.patch @@ -1,5 +1,5 @@ ---- a/MODULE.bazel 2025-11-22 20:51:10 -+++ b/MODULE.bazel 2025-11-22 20:51:10 +--- a/MODULE.bazel 2025-12-01 13:53:51 ++++ b/MODULE.bazel 2025-12-01 13:53:51 @@ -39,558 +39,4 @@ # HACK: In prod the includer's patch inserts the use_repo for multitool. This @@ -373,7 +373,7 @@ -bazel_dep(name = "xz", version = "5.4.5.bcr.5") -bazel_dep(name = "zstd", version = "1.5.7") -bazel_dep(name = "bzip2", version = "1.0.8.bcr.2") --bazel_dep(name = "rules_rs", version = "0.0.7") +-bazel_dep(name = "rules_rs", version = "0.0.16") - -crate = use_extension( - "@rules_rs//rs:extensions.bzl", @@ -464,7 +464,7 @@ -######################################## -# from bazel/include/telemetry.MODULE.bazel -# tools_telemetry --bazel_dep(name = "aspect_tools_telemetry", version = "0.2.8") +-bazel_dep(name = "aspect_tools_telemetry", version = "0.3.2") - -tel = use_extension("@aspect_tools_telemetry//:extension.bzl", "telemetry") -use_repo(tel, "aspect_tools_telemetry_report") diff --git a/MODULE.bazel b/MODULE.bazel index f7382609..ee926840 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -408,7 +408,7 @@ register_toolchains("@rust_toolchains//:all") bazel_dep(name = "xz", version = "5.4.5.bcr.5") bazel_dep(name = "zstd", version = "1.5.7") bazel_dep(name = "bzip2", version = "1.0.8.bcr.2") -bazel_dep(name = "rules_rs", version = "0.0.7") +bazel_dep(name = "rules_rs", version = "0.0.16") crate = use_extension( "@rules_rs//rs:extensions.bzl", @@ -499,7 +499,7 @@ register_toolchains("@bsd_tar_toolchains//:all") ######################################## # from bazel/include/telemetry.MODULE.bazel # tools_telemetry -bazel_dep(name = "aspect_tools_telemetry", version = "0.2.8") +bazel_dep(name = "aspect_tools_telemetry", version = "0.3.2") tel = use_extension("@aspect_tools_telemetry//:extension.bzl", "telemetry") use_repo(tel, "aspect_tools_telemetry_report") diff --git a/bazel/include/cargo.MODULE.bazel b/bazel/include/cargo.MODULE.bazel index 44b8908b..d5591196 100644 --- a/bazel/include/cargo.MODULE.bazel +++ b/bazel/include/cargo.MODULE.bazel @@ -4,7 +4,7 @@ bazel_dep(name = "xz", version = "5.4.5.bcr.5") bazel_dep(name = "zstd", version = "1.5.7") bazel_dep(name = "bzip2", version = "1.0.8.bcr.2") -bazel_dep(name = "rules_rs", version = "0.0.7") +bazel_dep(name = "rules_rs", version = "0.0.16") crate = use_extension( "@rules_rs//rs:extensions.bzl", diff --git a/bazel/include/telemetry.MODULE.bazel b/bazel/include/telemetry.MODULE.bazel index 02e07b2d..9dfc7083 100644 --- a/bazel/include/telemetry.MODULE.bazel +++ b/bazel/include/telemetry.MODULE.bazel @@ -1,5 +1,5 @@ # tools_telemetry -bazel_dep(name = "aspect_tools_telemetry", version = "0.2.8") +bazel_dep(name = "aspect_tools_telemetry", version = "0.3.2") tel = use_extension("@aspect_tools_telemetry//:extension.bzl", "telemetry") use_repo(tel, "aspect_tools_telemetry_report") diff --git a/py/private/py_venv/py_venv.bzl b/py/private/py_venv/py_venv.bzl index 0f3788da..cdbc2ac0 100644 --- a/py/private/py_venv/py_venv.bzl +++ b/py/private/py_venv/py_venv.bzl @@ -28,6 +28,21 @@ def _interpreter_flags(ctx): return args +# Forked from bazel-lib to avoid keeping `ctx` alive to execution phase +def _to_rlocation_path(workspace_name, file): + if file.short_path.startswith("../"): + return file.short_path[3:] + else: + return workspace_name + "/" + file.short_path + + +def _interpreter_path(workspace_name, py_toolchain): + return ( + _to_rlocation_path(workspace_name, py_toolchain.python) + if py_toolchain.runfiles_interpreter + else py_toolchain.python.path + ) + # FIXME: This is derived directly from the py_binary.bzl rule and should really # be a layer on top of it if we can figure out flowing the data around. This is # PoC quality. @@ -96,47 +111,62 @@ def _py_venv_base_impl(ctx): venv_name = ".{}".format(ctx.attr.name) venv_dir = ctx.actions.declare_directory(venv_name) + workspace_name = ctx.workspace_name + + args = ctx.actions.args() + args.add_all([venv_dir], expand_directories = False, format_each="--location=%s") + args.add(py_shim.bin.bin, format="--venv-shim=%s") + + # Post-bzlmod we need to record the current repository in case the + # user tries to consume a `py_venv_binary` across repo boundaries + # which could cause repo mapping to become relevant. + args.add( + ctx.label.repo_name or workspace_name, + format = "--repo=%s", + ) + args.add_all( + [py_toolchain], + map_each=lambda py_toolchain: _interpreter_path(workspace_name, py_toolchain), + format_each = "--python=%s", + allow_closure = True) + args.add(site_packages_pth_file, format = "--pth-file=%s") + args.add(env_file, format = "--env-file=%s") + args.add(ctx.bin_dir.path, format = "--bin-dir=%s") + args.add(ctx.attr.package_collisions, format = "--collision-strategy=%s") + args.add(venv_name, format = "--venv-name=%s") + args.add(ctx.attr.mode, format = "--mode=%s") + args.add( + "{}.{}".format( + py_toolchain.interpreter_version_info.major, + py_toolchain.interpreter_version_info.minor, + ), + format = "--version=%s", + ) + args.add( + "true" if ctx.attr.include_system_site_packages else "false", + format = "--include-system-site-packages=%s", + ) + args.add( + "true" if ctx.attr.include_system_site_packages else "false", + format = "--include-user-site-packages=%s", + ) + + if ctx.attr.debug: + args.add("--debug") ctx.actions.run( executable = venv_tool, - arguments = [ - "--location=" + venv_dir.path, - "--venv-shim=" + py_shim.bin.bin.path, - # Post-bzlmod we need to record the current repository in case the - # user tries to consume a `py_venv_binary` across repo boundaries - # which could cause repo mapping to become relevant. - "--repo=" + (ctx.label.repo_name or ctx.workspace_name), - "--python=" + (to_rlocation_path(ctx, py_toolchain.python) if py_toolchain.runfiles_interpreter else py_toolchain.python.path), - "--pth-file=" + site_packages_pth_file.path, - "--env-file=" + env_file.path, - "--bin-dir=" + ctx.bin_dir.path, - "--collision-strategy=" + ctx.attr.package_collisions, - "--venv-name=" + venv_name, - "--mode=" + ctx.attr.mode, - "--version={}.{}".format( - py_toolchain.interpreter_version_info.major, - py_toolchain.interpreter_version_info.minor, - ), - "--include-system-site-packages=" + ({ - True: "true", - False: "false", - }[ctx.attr.include_system_site_packages]), - "--include-user-site-packages=" + ({ - True: "true", - False: "false", - }[ctx.attr.include_system_site_packages]), - ] + (["--debug"] if ctx.attr.debug else []), + arguments = [args], inputs = rfs.merge_all([ - ctx.runfiles(files = [ - site_packages_pth_file, - env_file, - venv_tool, - ] + py_toolchain.files.to_list()), + ctx.runfiles(files = [site_packages_pth_file, env_file, venv_tool]), py_shim.default_info.default_runfiles, ]).files, outputs = [ venv_dir, ], + execution_requirements = { + "supports-path-mapping": "1", + }, # TODO: Is this right? The venv toolchain isn't quite in the right # configuration (target not exec) so we have to use a different source # of the target, but it is (logically) the venv toolchain. @@ -144,9 +174,10 @@ def _py_venv_base_impl(ctx): ) return venv_dir, rfs.merge_all([ - ctx.runfiles(files = [ - venv_dir, - ] + py_toolchain.files.to_list()), + ctx.runfiles( + files = [venv_dir], + transitive_files = py_toolchain.files, + ), ctx.attr._runfiles_lib[DefaultInfo].default_runfiles, ]) From 2dfb37a7bd96bc46a85fd5507e8c5225761631bb Mon Sep 17 00:00:00 2001 From: "aspect-marvin[bot]" Date: Mon, 1 Dec 2025 19:09:33 +0000 Subject: [PATCH 2/4] Pre-commit changes --- py/private/py_venv/py_venv.bzl | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/py/private/py_venv/py_venv.bzl b/py/private/py_venv/py_venv.bzl index cdbc2ac0..2d88372e 100644 --- a/py/private/py_venv/py_venv.bzl +++ b/py/private/py_venv/py_venv.bzl @@ -35,12 +35,9 @@ def _to_rlocation_path(workspace_name, file): else: return workspace_name + "/" + file.short_path - def _interpreter_path(workspace_name, py_toolchain): return ( - _to_rlocation_path(workspace_name, py_toolchain.python) - if py_toolchain.runfiles_interpreter - else py_toolchain.python.path + _to_rlocation_path(workspace_name, py_toolchain.python) if py_toolchain.runfiles_interpreter else py_toolchain.python.path ) # FIXME: This is derived directly from the py_binary.bzl rule and should really @@ -114,8 +111,8 @@ def _py_venv_base_impl(ctx): workspace_name = ctx.workspace_name args = ctx.actions.args() - args.add_all([venv_dir], expand_directories = False, format_each="--location=%s") - args.add(py_shim.bin.bin, format="--venv-shim=%s") + args.add_all([venv_dir], expand_directories = False, format_each = "--location=%s") + args.add(py_shim.bin.bin, format = "--venv-shim=%s") # Post-bzlmod we need to record the current repository in case the # user tries to consume a `py_venv_binary` across repo boundaries @@ -126,9 +123,10 @@ def _py_venv_base_impl(ctx): ) args.add_all( [py_toolchain], - map_each=lambda py_toolchain: _interpreter_path(workspace_name, py_toolchain), + map_each = lambda py_toolchain: _interpreter_path(workspace_name, py_toolchain), format_each = "--python=%s", - allow_closure = True) + allow_closure = True, + ) args.add(site_packages_pth_file, format = "--pth-file=%s") args.add(env_file, format = "--env-file=%s") args.add(ctx.bin_dir.path, format = "--bin-dir=%s") From a33ae962ebc5694d380f84364b170d3c5cdef917 Mon Sep 17 00:00:00 2001 From: David Zbarsky Date: Mon, 1 Dec 2025 14:13:13 -0500 Subject: [PATCH 3/4] bin_dir --- py/private/py_venv/py_venv.bzl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/py/private/py_venv/py_venv.bzl b/py/private/py_venv/py_venv.bzl index 2d88372e..d7ab49e8 100644 --- a/py/private/py_venv/py_venv.bzl +++ b/py/private/py_venv/py_venv.bzl @@ -129,7 +129,7 @@ def _py_venv_base_impl(ctx): ) args.add(site_packages_pth_file, format = "--pth-file=%s") args.add(env_file, format = "--env-file=%s") - args.add(ctx.bin_dir.path, format = "--bin-dir=%s") + args.add_all([ctx.bin_dir], expand_directories = False, format_each = "--bin-dir=%s") args.add(ctx.attr.package_collisions, format = "--collision-strategy=%s") args.add(venv_name, format = "--venv-name=%s") args.add(ctx.attr.mode, format = "--mode=%s") From 599d25cd4d3ab00507115034d47088828c8bea61 Mon Sep 17 00:00:00 2001 From: "aspect-marvin[bot]" Date: Mon, 1 Dec 2025 19:28:52 +0000 Subject: [PATCH 4/4] Pre-commit changes --- .../my_app_amd64_layers_listing.yaml | 25 +------------------ .../my_app_arm64_layers_listing.yaml | 25 +------------------ 2 files changed, 2 insertions(+), 48 deletions(-) diff --git a/py/tests/py_venv_image_layer/my_app_amd64_layers_listing.yaml b/py/tests/py_venv_image_layer/my_app_amd64_layers_listing.yaml index 469cf47e..6b0f138f 100644 --- a/py/tests/py_venv_image_layer/my_app_amd64_layers_listing.yaml +++ b/py/tests/py_venv_image_layer/my_app_amd64_layers_listing.yaml @@ -2469,32 +2469,9 @@ files: - -rwxr-xr-x 0 0 0 6181 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/+uv+whl_install__pypi__default__colorama/install/lib/python3.9/site-packages/colorama/win32.py - -rwxr-xr-x 0 0 0 7134 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/+uv+whl_install__pypi__default__colorama/install/lib/python3.9/site-packages/colorama/winterm.py - drwxr-xr-x 0 0 0 0 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/ - - -rwxr-xr-x 0 0 0 250 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/_aspect.pth + - -rwxr-xr-x 0 0 0 523 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/_aspect.pth - -rwxr-xr-x 0 0 0 19 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/_virtualenv.pth - -rwxr-xr-x 0 0 0 4342 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/_virtualenv.py - - drwxr-xr-x 0 0 0 0 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama-0.4.6.dist-info/ - - -rwxr-xr-x 0 0 0 14 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama-0.4.6.dist-info/INSTALLER - - -rwxr-xr-x 0 0 0 17158 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama-0.4.6.dist-info/METADATA - - -rwxr-xr-x 0 0 0 1549 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama-0.4.6.dist-info/RECORD - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama-0.4.6.dist-info/REQUESTED - - -rwxr-xr-x 0 0 0 105 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama-0.4.6.dist-info/WHEEL - - drwxr-xr-x 0 0 0 0 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama-0.4.6.dist-info/licenses/ - - -rwxr-xr-x 0 0 0 1491 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama-0.4.6.dist-info/licenses/LICENSE.txt - - drwxr-xr-x 0 0 0 0 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama/ - - -rwxr-xr-x 0 0 0 266 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama/__init__.py - - -rwxr-xr-x 0 0 0 2522 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama/ansi.py - - -rwxr-xr-x 0 0 0 11128 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama/ansitowin32.py - - -rwxr-xr-x 0 0 0 3325 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama/initialise.py - - drwxr-xr-x 0 0 0 0 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama/tests/ - - -rwxr-xr-x 0 0 0 75 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama/tests/__init__.py - - -rwxr-xr-x 0 0 0 2839 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama/tests/ansi_test.py - - -rwxr-xr-x 0 0 0 10678 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama/tests/ansitowin32_test.py - - -rwxr-xr-x 0 0 0 6741 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama/tests/initialise_test.py - - -rwxr-xr-x 0 0 0 1866 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama/tests/isatty_test.py - - -rwxr-xr-x 0 0 0 1079 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama/tests/utils.py - - -rwxr-xr-x 0 0 0 3709 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama/tests/winterm_test.py - - -rwxr-xr-x 0 0 0 6181 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama/win32.py - - -rwxr-xr-x 0 0 0 7134 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama/winterm.py --- layer: 2 files: diff --git a/py/tests/py_venv_image_layer/my_app_arm64_layers_listing.yaml b/py/tests/py_venv_image_layer/my_app_arm64_layers_listing.yaml index 90e9c70d..29157c17 100644 --- a/py/tests/py_venv_image_layer/my_app_arm64_layers_listing.yaml +++ b/py/tests/py_venv_image_layer/my_app_arm64_layers_listing.yaml @@ -2450,32 +2450,9 @@ files: - -rwxr-xr-x 0 0 0 6181 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/+uv+whl_install__pypi__default__colorama/install/lib/python3.9/site-packages/colorama/win32.py - -rwxr-xr-x 0 0 0 7134 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/+uv+whl_install__pypi__default__colorama/install/lib/python3.9/site-packages/colorama/winterm.py - drwxr-xr-x 0 0 0 0 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/ - - -rwxr-xr-x 0 0 0 250 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/_aspect.pth + - -rwxr-xr-x 0 0 0 523 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/_aspect.pth - -rwxr-xr-x 0 0 0 19 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/_virtualenv.pth - -rwxr-xr-x 0 0 0 4342 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/_virtualenv.py - - drwxr-xr-x 0 0 0 0 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama-0.4.6.dist-info/ - - -rwxr-xr-x 0 0 0 14 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama-0.4.6.dist-info/INSTALLER - - -rwxr-xr-x 0 0 0 17158 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama-0.4.6.dist-info/METADATA - - -rwxr-xr-x 0 0 0 1549 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama-0.4.6.dist-info/RECORD - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama-0.4.6.dist-info/REQUESTED - - -rwxr-xr-x 0 0 0 105 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama-0.4.6.dist-info/WHEEL - - drwxr-xr-x 0 0 0 0 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama-0.4.6.dist-info/licenses/ - - -rwxr-xr-x 0 0 0 1491 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama-0.4.6.dist-info/licenses/LICENSE.txt - - drwxr-xr-x 0 0 0 0 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama/ - - -rwxr-xr-x 0 0 0 266 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama/__init__.py - - -rwxr-xr-x 0 0 0 2522 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama/ansi.py - - -rwxr-xr-x 0 0 0 11128 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama/ansitowin32.py - - -rwxr-xr-x 0 0 0 3325 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama/initialise.py - - drwxr-xr-x 0 0 0 0 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama/tests/ - - -rwxr-xr-x 0 0 0 75 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama/tests/__init__.py - - -rwxr-xr-x 0 0 0 2839 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama/tests/ansi_test.py - - -rwxr-xr-x 0 0 0 10678 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama/tests/ansitowin32_test.py - - -rwxr-xr-x 0 0 0 6741 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama/tests/initialise_test.py - - -rwxr-xr-x 0 0 0 1866 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama/tests/isatty_test.py - - -rwxr-xr-x 0 0 0 1079 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama/tests/utils.py - - -rwxr-xr-x 0 0 0 3709 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama/tests/winterm_test.py - - -rwxr-xr-x 0 0 0 6181 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama/win32.py - - -rwxr-xr-x 0 0 0 7134 Jan 1 2023 ./py/tests/py_venv_image_layer/my_app_bin.runfiles/_main/py/tests/py_venv_image_layer/.my_app_bin/lib/python3.9/site-packages/colorama/winterm.py --- layer: 2 files: