diff --git a/news/174.bugfix b/news/174.bugfix new file mode 100644 index 0000000000000000000000000000000000000000..ebe2acb824398c93bac3b220bf9e4c8574c9a508 --- /dev/null +++ b/news/174.bugfix @@ -0,0 +1 @@ +Ensure `setuptools` is installed before invoking editable install script. diff --git a/pdm/installers/installers.py b/pdm/installers/installers.py index 7260181498cdd3db3c4560044f49825efb9c0d44..d48cc06f8ceed0fbbf1524b618e09844a91103a3 100644 --- a/pdm/installers/installers.py +++ b/pdm/installers/installers.py @@ -9,7 +9,7 @@ from pip._vendor.pkg_resources import EggInfoDistribution from pip_shims import shims from pdm.iostream import stream -from pdm.models.builders import log_subprocessor +from pdm.models.builders import EnvBuilder from pdm.models.requirements import parse_requirement if TYPE_CHECKING: @@ -84,9 +84,12 @@ class Installer: # pragma: no cover paths["purelib"], paths["scripts"], ] - with self.environment.activate(True): + with EnvBuilder(ireq.unpacked_source_directory, self.environment) as builder: + builder.install(["setuptools"]) extra_env = {"INJECT_SITE": "1"} if not self.environment.is_global else None - log_subprocessor(install_args, ireq.unpacked_source_directory, extra_env) + builder.subprocess_runner( + install_args, ireq.unpacked_source_directory, extra_env + ) def uninstall(self, dist: Distribution) -> None: req = parse_requirement(dist.project_name)