From 0fd95df801622c9e92f8aab1da9ef0574cd58daf Mon Sep 17 00:00:00 2001 From: Chris Vandervoort Date: Wed, 8 Oct 2025 14:03:17 -0700 Subject: [PATCH 01/11] mark each occurence of pkg_resources --- kfp/v2/google/client/client.py | 2 ++ metaflow/__init__.py | 1 + metaflow/_vendor/click/decorators.py | 2 ++ metaflow/metaflow_config.py | 2 ++ 4 files changed, 7 insertions(+) diff --git a/kfp/v2/google/client/client.py b/kfp/v2/google/client/client.py index fa96cdcd3c3..4c76ac3c6ab 100644 --- a/kfp/v2/google/client/client.py +++ b/kfp/v2/google/client/client.py @@ -15,6 +15,7 @@ import datetime import json +# TODO: remove pkg_resources import pkg_resources import re import subprocess @@ -187,6 +188,7 @@ def __init__( self._region = region self._parent = _PARENT_PATTERN.format(project_id, region) + # TODO: remove pkg_resources discovery_doc_path = pkg_resources.resource_filename( 'kfp.v2.google.client', 'discovery/aiplatform_public_google_rest_v1beta1.json') diff --git a/metaflow/__init__.py b/metaflow/__init__.py index 75ef534fea6..0eec8cf028c 100644 --- a/metaflow/__init__.py +++ b/metaflow/__init__.py @@ -187,6 +187,7 @@ class and related decorators. pass del globals()["_n"] +# TODO: remove pkg_resources import pkg_resources try: diff --git a/metaflow/_vendor/click/decorators.py b/metaflow/_vendor/click/decorators.py index c7b5af6cc57..d810f33d460 100644 --- a/metaflow/_vendor/click/decorators.py +++ b/metaflow/_vendor/click/decorators.py @@ -281,10 +281,12 @@ def callback(ctx, param, value): ver = version if ver is None: try: + # TODO: remove pkg_resources import pkg_resources except ImportError: pass else: + # TODO: remove pkg_resources for dist in pkg_resources.working_set: scripts = dist.get_entry_map().get("console_scripts") or {} for _, entry_point in iteritems(scripts): diff --git a/metaflow/metaflow_config.py b/metaflow/metaflow_config.py index 6d335505ee3..b4c9f720d33 100644 --- a/metaflow/metaflow_config.py +++ b/metaflow/metaflow_config.py @@ -4,6 +4,7 @@ import sys import types +# TODO: remove pkg_resources import pkg_resources from metaflow.exception import MetaflowException @@ -305,6 +306,7 @@ def filter(self, record): logger.addFilter(Filter()) +# TODO: remove pkg_resources def get_version(pkg): return pkg_resources.get_distribution(pkg).version From 75a5b393eff6b46e99531ad4042e9da0883c9557 Mon Sep 17 00:00:00 2001 From: Chris Vandervoort Date: Wed, 8 Oct 2025 14:15:07 -0700 Subject: [PATCH 02/11] fix init file --- metaflow/__init__.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/metaflow/__init__.py b/metaflow/__init__.py index 0eec8cf028c..e236fa90c1a 100644 --- a/metaflow/__init__.py +++ b/metaflow/__init__.py @@ -187,11 +187,10 @@ class and related decorators. pass del globals()["_n"] -# TODO: remove pkg_resources -import pkg_resources +from importlib.metadata import PackageNotFoundError, version try: - __version__ = pkg_resources.get_distribution("metaflow").version + __version__ = version("metaflow") except: # this happens on remote environments since the job package # does not have a version From b51690c24716168411ad91351b9b07826a79b6d6 Mon Sep 17 00:00:00 2001 From: Chris Vandervoort Date: Wed, 8 Oct 2025 14:36:05 -0700 Subject: [PATCH 03/11] fix decorators --- metaflow/__init__.py | 2 +- metaflow/_vendor/click/decorators.py | 20 +++++++++++--------- metaflow/metaflow_config.py | 5 ++--- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/metaflow/__init__.py b/metaflow/__init__.py index e236fa90c1a..ac9cadd385f 100644 --- a/metaflow/__init__.py +++ b/metaflow/__init__.py @@ -191,7 +191,7 @@ class and related decorators. try: __version__ = version("metaflow") -except: +except PackageNotFoundError: # this happens on remote environments since the job package # does not have a version __version__ = None diff --git a/metaflow/_vendor/click/decorators.py b/metaflow/_vendor/click/decorators.py index d810f33d460..259bf299a24 100644 --- a/metaflow/_vendor/click/decorators.py +++ b/metaflow/_vendor/click/decorators.py @@ -281,18 +281,20 @@ def callback(ctx, param, value): ver = version if ver is None: try: - # TODO: remove pkg_resources - import pkg_resources + from importlib.metadata import distributions except ImportError: pass else: - # TODO: remove pkg_resources - for dist in pkg_resources.working_set: - scripts = dist.get_entry_map().get("console_scripts") or {} - for _, entry_point in iteritems(scripts): - if entry_point.module_name == module: - ver = dist.version - break + for dist in distributions(): + for entry_point in dist.entry_points: + if entry_point.group == "console_scripts": + # entry_point.value is in format "module.submodule:function" + module_part = entry_point.value.split(':')[0] + if module_part == module: + ver = dist.version + break + if ver is not None: + break if ver is None: raise RuntimeError("Could not determine version") echo(message % {"prog": prog, "version": ver}, color=ctx.color) diff --git a/metaflow/metaflow_config.py b/metaflow/metaflow_config.py index b4c9f720d33..27bed749c61 100644 --- a/metaflow/metaflow_config.py +++ b/metaflow/metaflow_config.py @@ -4,8 +4,7 @@ import sys import types -# TODO: remove pkg_resources -import pkg_resources +from importlib.metadata import version from metaflow.exception import MetaflowException @@ -308,7 +307,7 @@ def filter(self, record): # TODO: remove pkg_resources def get_version(pkg): - return pkg_resources.get_distribution(pkg).version + return version(pkg) # PINNED_CONDA_LIBS are the libraries that metaflow depends on for execution From b5626c3fb212601b6b36bad610c76d4e6604f2c3 Mon Sep 17 00:00:00 2001 From: Chris Vandervoort Date: Wed, 8 Oct 2025 14:43:48 -0700 Subject: [PATCH 04/11] kfp client --- kfp/v2/google/client/client.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/kfp/v2/google/client/client.py b/kfp/v2/google/client/client.py index 4c76ac3c6ab..4130e56bf71 100644 --- a/kfp/v2/google/client/client.py +++ b/kfp/v2/google/client/client.py @@ -15,8 +15,7 @@ import datetime import json -# TODO: remove pkg_resources -import pkg_resources +from importlib.resources import files import re import subprocess import warnings @@ -188,11 +187,9 @@ def __init__( self._region = region self._parent = _PARENT_PATTERN.format(project_id, region) - # TODO: remove pkg_resources - discovery_doc_path = pkg_resources.resource_filename( - 'kfp.v2.google.client', + + discovery_doc_path = files('kfp.v2.google.client').joinpath( 'discovery/aiplatform_public_google_rest_v1beta1.json') - with open(discovery_doc_path) as f: discovery_doc = f.read() From 357ad9b57ac589b1c752a9d18ac27e6456590139 Mon Sep 17 00:00:00 2001 From: Chris Vandervoort Date: Wed, 8 Oct 2025 14:53:20 -0700 Subject: [PATCH 05/11] clean up --- kfp/v2/google/client/client.py | 1 + metaflow/metaflow_config.py | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/kfp/v2/google/client/client.py b/kfp/v2/google/client/client.py index 4130e56bf71..8d5c56be987 100644 --- a/kfp/v2/google/client/client.py +++ b/kfp/v2/google/client/client.py @@ -190,6 +190,7 @@ def __init__( discovery_doc_path = files('kfp.v2.google.client').joinpath( 'discovery/aiplatform_public_google_rest_v1beta1.json') + with open(discovery_doc_path) as f: discovery_doc = f.read() diff --git a/metaflow/metaflow_config.py b/metaflow/metaflow_config.py index 27bed749c61..fb1a7a9c691 100644 --- a/metaflow/metaflow_config.py +++ b/metaflow/metaflow_config.py @@ -305,7 +305,6 @@ def filter(self, record): logger.addFilter(Filter()) -# TODO: remove pkg_resources def get_version(pkg): return version(pkg) From 7379e05fb0f49eb38825b0ebaaaa9b6b2d4c4d4f Mon Sep 17 00:00:00 2001 From: Chris Vandervoort Date: Wed, 8 Oct 2025 15:56:55 -0700 Subject: [PATCH 06/11] add print statements before and after import --- metaflow/__init__.py | 7 +++++-- metaflow/_vendor/click/decorators.py | 2 ++ metaflow/metaflow_config.py | 2 ++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/metaflow/__init__.py b/metaflow/__init__.py index ac9cadd385f..be16af18127 100644 --- a/metaflow/__init__.py +++ b/metaflow/__init__.py @@ -187,11 +187,14 @@ class and related decorators. pass del globals()["_n"] -from importlib.metadata import PackageNotFoundError, version + try: + print("BEFORE __init__.py: from importlib.metadata import version") + from importlib.metadata import version + print("AFTER __init__.py: from importlib.metadata import version") __version__ = version("metaflow") -except PackageNotFoundError: +except: # this happens on remote environments since the job package # does not have a version __version__ = None diff --git a/metaflow/_vendor/click/decorators.py b/metaflow/_vendor/click/decorators.py index 259bf299a24..5a151109ec8 100644 --- a/metaflow/_vendor/click/decorators.py +++ b/metaflow/_vendor/click/decorators.py @@ -281,7 +281,9 @@ def callback(ctx, param, value): ver = version if ver is None: try: + print("BEFORE decorators.py: from importlib.metadata import distributions") from importlib.metadata import distributions + print("AFTER decorators.py: from importlib.metadata import distributions") except ImportError: pass else: diff --git a/metaflow/metaflow_config.py b/metaflow/metaflow_config.py index fb1a7a9c691..48ade7c56d5 100644 --- a/metaflow/metaflow_config.py +++ b/metaflow/metaflow_config.py @@ -4,7 +4,9 @@ import sys import types +print("BEFORE metaflow_config.py: from importlib.metadata import version") from importlib.metadata import version +print("AFTER metaflow_config.py: from importlib.metadata import version") from metaflow.exception import MetaflowException From a20438faa85c3f04867f4eeff99f4d00d2b1f0ba Mon Sep 17 00:00:00 2001 From: Chris Vandervoort Date: Wed, 8 Oct 2025 20:56:54 -0700 Subject: [PATCH 07/11] remove excess logging --- kfp/v2/google/client/client.py | 16 ++++++++++++---- metaflow/__init__.py | 2 -- metaflow/metaflow_config.py | 2 -- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/kfp/v2/google/client/client.py b/kfp/v2/google/client/client.py index 8d5c56be987..66d041052dc 100644 --- a/kfp/v2/google/client/client.py +++ b/kfp/v2/google/client/client.py @@ -15,7 +15,10 @@ import datetime import json -from importlib.resources import files +try: + import pkg_resources +except: + print("pkg_resources not found; upgrade to importlib.resources instead") import re import subprocess import warnings @@ -187,9 +190,14 @@ def __init__( self._region = region self._parent = _PARENT_PATTERN.format(project_id, region) - - discovery_doc_path = files('kfp.v2.google.client').joinpath( - 'discovery/aiplatform_public_google_rest_v1beta1.json') + + try: + discovery_doc_path = pkg_resources.resource_filename( + 'kfp.v2.google.client', + 'discovery/aiplatform_public_google_rest_v1beta1.json') + except: + print("pkg_resources not found; upgrade to importlib.resources instead.") + raise with open(discovery_doc_path) as f: discovery_doc = f.read() diff --git a/metaflow/__init__.py b/metaflow/__init__.py index be16af18127..61663056e27 100644 --- a/metaflow/__init__.py +++ b/metaflow/__init__.py @@ -190,9 +190,7 @@ class and related decorators. try: - print("BEFORE __init__.py: from importlib.metadata import version") from importlib.metadata import version - print("AFTER __init__.py: from importlib.metadata import version") __version__ = version("metaflow") except: # this happens on remote environments since the job package diff --git a/metaflow/metaflow_config.py b/metaflow/metaflow_config.py index 48ade7c56d5..fb1a7a9c691 100644 --- a/metaflow/metaflow_config.py +++ b/metaflow/metaflow_config.py @@ -4,9 +4,7 @@ import sys import types -print("BEFORE metaflow_config.py: from importlib.metadata import version") from importlib.metadata import version -print("AFTER metaflow_config.py: from importlib.metadata import version") from metaflow.exception import MetaflowException From 8647cce146d505b719eb8bcde7c033a4c52b676b Mon Sep 17 00:00:00 2001 From: Chris Vandervoort Date: Wed, 8 Oct 2025 21:06:08 -0700 Subject: [PATCH 08/11] clean up init --- metaflow/__init__.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/metaflow/__init__.py b/metaflow/__init__.py index 61663056e27..213d6efa75d 100644 --- a/metaflow/__init__.py +++ b/metaflow/__init__.py @@ -187,10 +187,9 @@ class and related decorators. pass del globals()["_n"] - +from importlib.metadata import version try: - from importlib.metadata import version __version__ = version("metaflow") except: # this happens on remote environments since the job package From 52b6e30e0164a7a15ae75b52fc70f0fe19bfcf77 Mon Sep 17 00:00:00 2001 From: Chris Vandervoort Date: Thu, 9 Oct 2025 08:56:18 -0700 Subject: [PATCH 09/11] revert decorators --- metaflow/_vendor/click/decorators.py | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/metaflow/_vendor/click/decorators.py b/metaflow/_vendor/click/decorators.py index 5a151109ec8..f7047bddda5 100644 --- a/metaflow/_vendor/click/decorators.py +++ b/metaflow/_vendor/click/decorators.py @@ -281,22 +281,18 @@ def callback(ctx, param, value): ver = version if ver is None: try: - print("BEFORE decorators.py: from importlib.metadata import distributions") - from importlib.metadata import distributions - print("AFTER decorators.py: from importlib.metadata import distributions") + import pkg_resources except ImportError: + print("pkg_resources not found; upgrade to importlib.resources instead") + raise pass else: - for dist in distributions(): - for entry_point in dist.entry_points: - if entry_point.group == "console_scripts": - # entry_point.value is in format "module.submodule:function" - module_part = entry_point.value.split(':')[0] - if module_part == module: - ver = dist.version - break - if ver is not None: - break + for dist in pkg_resources.working_set: + scripts = dist.get_entry_map().get("console_scripts") or {} + for _, entry_point in iteritems(scripts): + if entry_point.module_name == module: + ver = dist.version + break if ver is None: raise RuntimeError("Could not determine version") echo(message % {"prog": prog, "version": ver}, color=ctx.color) From 45ccc39996e97d94a70699b427c9dba662245068 Mon Sep 17 00:00:00 2001 From: Chris Vandervoort Date: Thu, 9 Oct 2025 08:58:10 -0700 Subject: [PATCH 10/11] clean up decorators --- metaflow/_vendor/click/decorators.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/metaflow/_vendor/click/decorators.py b/metaflow/_vendor/click/decorators.py index f7047bddda5..474b9ed24f5 100644 --- a/metaflow/_vendor/click/decorators.py +++ b/metaflow/_vendor/click/decorators.py @@ -283,8 +283,6 @@ def callback(ctx, param, value): try: import pkg_resources except ImportError: - print("pkg_resources not found; upgrade to importlib.resources instead") - raise pass else: for dist in pkg_resources.working_set: @@ -294,7 +292,7 @@ def callback(ctx, param, value): ver = dist.version break if ver is None: - raise RuntimeError("Could not determine version") + raise RuntimeError("Could not determine version; pkg_resources not found; upgrade to importlib.resources instead") echo(message % {"prog": prog, "version": ver}, color=ctx.color) ctx.exit() From 82a99413852b80f62dd5a1f034d98075157e6210 Mon Sep 17 00:00:00 2001 From: Chris Vandervoort Date: Thu, 9 Oct 2025 09:29:48 -0700 Subject: [PATCH 11/11] clean up decorators --- metaflow/_vendor/click/decorators.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/metaflow/_vendor/click/decorators.py b/metaflow/_vendor/click/decorators.py index 474b9ed24f5..7af3fd8ba43 100644 --- a/metaflow/_vendor/click/decorators.py +++ b/metaflow/_vendor/click/decorators.py @@ -283,7 +283,8 @@ def callback(ctx, param, value): try: import pkg_resources except ImportError: - pass + print("pkg_resources not found; upgrade to importlib.resources instead") + raise else: for dist in pkg_resources.working_set: scripts = dist.get_entry_map().get("console_scripts") or {} @@ -292,7 +293,7 @@ def callback(ctx, param, value): ver = dist.version break if ver is None: - raise RuntimeError("Could not determine version; pkg_resources not found; upgrade to importlib.resources instead") + raise RuntimeError("Could not determine version") echo(message % {"prog": prog, "version": ver}, color=ctx.color) ctx.exit()