mirror of
https://github.com/huggingface/diffusers.git
synced 2026-01-27 17:22:53 +03:00
cache packages_distributions (#11453)
* cache packages_distributions * remove unused exception reference * make style Signed-off-by: Vladimir Mandic <mandic00@live.com> * change name to _package_map --------- Signed-off-by: Vladimir Mandic <mandic00@live.com> Co-authored-by: DN6 <dhruv.nair@gmail.com>
This commit is contained in:
@@ -36,7 +36,10 @@ if sys.version_info < (3, 8):
|
||||
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:
|
||||
_package_map = None
|
||||
|
||||
logger = logging.get_logger(__name__) # pylint: disable=invalid-name
|
||||
|
||||
@@ -56,35 +59,32 @@ _is_google_colab = "google.colab" in sys.modules or any(k.startswith("COLAB_") f
|
||||
|
||||
|
||||
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:
|
||||
if _package_map is None:
|
||||
_package_map = defaultdict(list)
|
||||
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:
|
||||
package_map = importlib_metadata.packages_distributions()
|
||||
except Exception as e:
|
||||
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:
|
||||
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):
|
||||
|
||||
Reference in New Issue
Block a user