_framework_compat.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. """
  2. Backward compatibility for homebrew builds on macOS.
  3. """
  4. import sys
  5. import os
  6. import functools
  7. import subprocess
  8. import sysconfig
  9. @functools.lru_cache()
  10. def enabled():
  11. """
  12. Only enabled for Python 3.9 framework homebrew builds
  13. except ensurepip and venv.
  14. """
  15. PY39 = (3, 9) < sys.version_info < (3, 10)
  16. framework = sys.platform == 'darwin' and sys._framework
  17. homebrew = "Cellar" in sysconfig.get_config_var('projectbase')
  18. venv = sys.prefix != sys.base_prefix
  19. ensurepip = os.environ.get("ENSUREPIP_OPTIONS")
  20. return PY39 and framework and homebrew and not venv and not ensurepip
  21. schemes = dict(
  22. osx_framework_library=dict(
  23. stdlib='{installed_base}/{platlibdir}/python{py_version_short}',
  24. platstdlib='{platbase}/{platlibdir}/python{py_version_short}',
  25. purelib='{homebrew_prefix}/lib/python{py_version_short}/site-packages',
  26. platlib='{homebrew_prefix}/{platlibdir}/python{py_version_short}/site-packages',
  27. include='{installed_base}/include/python{py_version_short}{abiflags}',
  28. platinclude='{installed_platbase}/include/python{py_version_short}{abiflags}',
  29. scripts='{homebrew_prefix}/bin',
  30. data='{homebrew_prefix}',
  31. )
  32. )
  33. @functools.lru_cache()
  34. def vars():
  35. if not enabled():
  36. return {}
  37. homebrew_prefix = subprocess.check_output(['brew', '--prefix'], text=True).strip()
  38. return locals()
  39. def scheme(name):
  40. """
  41. Override the selected scheme for posix_prefix.
  42. """
  43. if not enabled() or not name.endswith('_prefix'):
  44. return name
  45. return 'osx_framework_library'