From 86b4d8874361982a55e69cd88b837af05c01a2fc Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 29 Apr 2025 10:42:14 -0400 Subject: [PATCH 1/4] cache packages_distributions --- src/diffusers/utils/import_utils.py | 36 ++++++++++++++--------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/diffusers/utils/import_utils.py b/src/diffusers/utils/import_utils.py index 79f4601ae6eb..668fc9b53856 100644 --- a/src/diffusers/utils/import_utils.py +++ b/src/diffusers/utils/import_utils.py @@ -36,7 +36,10 @@ import importlib_metadata else: import importlib.metadata as importlib_metadata - +try: + package_map = importlib_metadata.packages_distributions() # load-once to avoid expensive calls +except Exception as e: + package_map = None logger = logging.get_logger(__name__) # pylint: disable=invalid-name @@ -56,28 +59,25 @@ def _is_package_available(pkg_name: str, get_dist_name: bool = False) -> Tuple[bool, str]: + global package_map pkg_exists = importlib.util.find_spec(pkg_name) is not None pkg_version = "N/A" if pkg_exists: - try: - package_map = importlib_metadata.packages_distributions() - except Exception as e: + if package_map is None: package_map = defaultdict(list) - if isinstance(e, AttributeError): - try: - # Fallback for Python < 3.10 - for dist in importlib_metadata.distributions(): - _top_level_declared = (dist.read_text("top_level.txt") or "").split() - _infered_opt_names = { - f.parts[0] if len(f.parts) > 1 else inspect.getmodulename(f) for f in (dist.files or []) - } - {None} - _top_level_inferred = filter(lambda name: "." not in name, _infered_opt_names) - for pkg in _top_level_declared or _top_level_inferred: - package_map[pkg].append(dist.metadata["Name"]) - except Exception as _: - pass - + try: + # Fallback for Python < 3.10 + for dist in importlib_metadata.distributions(): + _top_level_declared = (dist.read_text("top_level.txt") or "").split() + _infered_opt_names = { + f.parts[0] if len(f.parts) > 1 else inspect.getmodulename(f) for f in (dist.files or []) + } - {None} + _top_level_inferred = filter(lambda name: "." not in name, _infered_opt_names) + for pkg in _top_level_declared or _top_level_inferred: + package_map[pkg].append(dist.metadata["Name"]) + except Exception as _: + pass try: if get_dist_name and pkg_name in package_map and package_map[pkg_name]: if len(package_map[pkg_name]) > 1: From a60f710ebe9564a76b1c802829a5844583e58a66 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 29 Apr 2025 16:41:50 -0400 Subject: [PATCH 2/4] remove unused exception reference --- src/diffusers/utils/import_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/diffusers/utils/import_utils.py b/src/diffusers/utils/import_utils.py index 668fc9b53856..6ebedb4c2d84 100644 --- a/src/diffusers/utils/import_utils.py +++ b/src/diffusers/utils/import_utils.py @@ -38,7 +38,7 @@ import importlib.metadata as importlib_metadata try: package_map = importlib_metadata.packages_distributions() # load-once to avoid expensive calls -except Exception as e: +except Exception: package_map = None logger = logging.get_logger(__name__) # pylint: disable=invalid-name From 02fbc54a5f71824f4a8acf33f4eaf62555b7ce2a Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Wed, 30 Apr 2025 10:21:23 -0400 Subject: [PATCH 3/4] make style Signed-off-by: Vladimir Mandic --- src/diffusers/utils/import_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/diffusers/utils/import_utils.py b/src/diffusers/utils/import_utils.py index 6ebedb4c2d84..ac5e2273ebbf 100644 --- a/src/diffusers/utils/import_utils.py +++ b/src/diffusers/utils/import_utils.py @@ -37,7 +37,7 @@ else: import importlib.metadata as importlib_metadata try: - package_map = importlib_metadata.packages_distributions() # load-once to avoid expensive calls + package_map = importlib_metadata.packages_distributions() # load-once to avoid expensive calls except Exception: package_map = None From 6c1bcb647aa75cd11b7e941be6deacff5496b187 Mon Sep 17 00:00:00 2001 From: DN6 Date: Thu, 1 May 2025 19:58:12 +0530 Subject: [PATCH 4/4] change name to _package_map --- src/diffusers/utils/import_utils.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/diffusers/utils/import_utils.py b/src/diffusers/utils/import_utils.py index 57ac6d9a5ce2..406f1d999d9f 100644 --- a/src/diffusers/utils/import_utils.py +++ b/src/diffusers/utils/import_utils.py @@ -37,9 +37,9 @@ else: import importlib.metadata as importlib_metadata try: - package_map = importlib_metadata.packages_distributions() # load-once to avoid expensive calls + _package_map = importlib_metadata.packages_distributions() # load-once to avoid expensive calls except Exception: - package_map = None + _package_map = None logger = logging.get_logger(__name__) # pylint: disable=invalid-name @@ -59,13 +59,13 @@ def _is_package_available(pkg_name: str, get_dist_name: bool = False) -> Tuple[bool, str]: - global package_map + global _package_map pkg_exists = importlib.util.find_spec(pkg_name) is not None pkg_version = "N/A" if pkg_exists: - if package_map is None: - package_map = defaultdict(list) + if _package_map is None: + _package_map = defaultdict(list) try: # Fallback for Python < 3.10 for dist in importlib_metadata.distributions(): @@ -75,16 +75,16 @@ def _is_package_available(pkg_name: str, get_dist_name: bool = False) -> Tuple[b } - {None} _top_level_inferred = filter(lambda name: "." not in name, _infered_opt_names) for pkg in _top_level_declared or _top_level_inferred: - package_map[pkg].append(dist.metadata["Name"]) + _package_map[pkg].append(dist.metadata["Name"]) except Exception as _: pass try: - if get_dist_name and pkg_name in package_map and package_map[pkg_name]: - if len(package_map[pkg_name]) > 1: + if get_dist_name and pkg_name in _package_map and _package_map[pkg_name]: + if len(_package_map[pkg_name]) > 1: logger.warning( - f"Multiple distributions found for package {pkg_name}. Picked distribution: {package_map[pkg_name][0]}" + f"Multiple distributions found for package {pkg_name}. Picked distribution: {_package_map[pkg_name][0]}" ) - pkg_name = package_map[pkg_name][0] + pkg_name = _package_map[pkg_name][0] pkg_version = importlib_metadata.version(pkg_name) logger.debug(f"Successfully imported {pkg_name} version {pkg_version}") except (ImportError, importlib_metadata.PackageNotFoundError):