From 55d8d7eddf22d9497a6415c3e0564de345fb2ae0 Mon Sep 17 00:00:00 2001 From: Joshua Root Date: Wed, 3 Nov 2021 05:06:45 +1100 Subject: [PATCH] Only import importlib_metadata when needed Similar to #395, this helps with bootstrap issues with python < 3.8. Adjust test_pip_needs_upgrade_mac_os_11 accordingly. --- src/build/env.py | 10 +++++----- tests/test_env.py | 3 ++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/build/env.py b/src/build/env.py index b9e8f62b..101aadd5 100644 --- a/src/build/env.py +++ b/src/build/env.py @@ -18,11 +18,6 @@ import build -if sys.version_info < (3, 8): - import importlib_metadata as metadata -else: - from importlib import metadata - try: import virtualenv except ModuleNotFoundError: @@ -260,6 +255,11 @@ def _create_isolated_env_venv(path: str) -> Tuple[str, str]: import packaging.version + if sys.version_info < (3, 8): + import importlib_metadata as metadata + else: + from importlib import metadata + symlinks = _fs_supports_symlink() try: venv.EnvBuilder(with_pip=True, symlinks=symlinks).create(path) diff --git a/tests/test_env.py b/tests/test_env.py index a1ee0cbe..9f906a09 100644 --- a/tests/test_env.py +++ b/tests/test_env.py @@ -139,7 +139,8 @@ def test_pip_needs_upgrade_mac_os_11(mocker, pip_version, arch): mocker.patch('platform.system', return_value='Darwin') mocker.patch('platform.machine', return_value=arch) mocker.patch('platform.mac_ver', return_value=('11.0', ('', '', ''), '')) - mocker.patch('build.env.metadata.distributions', return_value=(SimpleNamespace(version=pip_version),)) + metadata_name = 'importlib_metadata' if sys.version_info < (3, 8) else 'importlib.metadata' + mocker.patch(metadata_name+'.distributions', return_value=(SimpleNamespace(version=pip_version),)) min_version = Version('20.3' if arch == 'x86_64' else '21.0.1') with build.env.IsolatedEnvBuilder():