compat.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. # ------------------------------------------------------------------
  2. # Copyright (c) 2023 PyInstaller Development Team.
  3. #
  4. # This file is distributed under the terms of the GNU General Public
  5. # License (version 2.0 or later).
  6. #
  7. # The full license is available in LICENSE, distributed with
  8. # this software.
  9. #
  10. # SPDX-License-Identifier: GPL-2.0-or-later
  11. # ------------------------------------------------------------------
  12. import sys
  13. from PyInstaller.utils.hooks import is_module_satisfies
  14. if is_module_satisfies("PyInstaller >= 6.0"):
  15. # PyInstaller >= 6.0 imports importlib_metadata in its compat module
  16. from PyInstaller.compat import importlib_metadata
  17. else:
  18. # Older PyInstaller version - duplicate logic from PyInstaller 6.0
  19. class ImportlibMetadataError(SystemExit):
  20. def __init__(self):
  21. super().__init__(
  22. "pyinstaller-hooks-contrib requires importlib.metadata from python >= 3.10 stdlib or "
  23. "importlib_metadata from importlib-metadata >= 4.6"
  24. )
  25. if sys.version_info >= (3, 10):
  26. import importlib.metadata as importlib_metadata
  27. else:
  28. try:
  29. import importlib_metadata
  30. except ImportError as e:
  31. raise ImportlibMetadataError() from e
  32. import packaging.version # For importlib_metadata version check
  33. # Validate the version
  34. if packaging.version.parse(importlib_metadata.version("importlib-metadata")) < packaging.version.parse("4.6"):
  35. raise ImportlibMetadataError()