1import os 2from typing import Any, Mapping, Optional 3 4from pdm.builders.base import EnvBuilder 5 6 7class WheelBuilder(EnvBuilder): 8 """Build wheel in isolated env with managed Python.""" 9 10 def prepare_metadata( 11 self, out_dir: str, config_settings: Optional[Mapping[str, Any]] = None 12 ) -> str: 13 self.install(self._requires, shared=True) 14 requires = self._hook.get_requires_for_build_wheel(config_settings) 15 self.install(requires) 16 filename = self._hook.prepare_metadata_for_build_wheel(out_dir, config_settings) 17 return os.path.join(out_dir, filename) 18 19 def build( 20 self, 21 out_dir: str, 22 config_settings: Optional[Mapping[str, Any]] = None, 23 metadata_directory: Optional[str] = None, 24 ) -> str: 25 self.install(self._requires, shared=True) 26 requires = self._hook.get_requires_for_build_wheel(config_settings) 27 self.install(requires) 28 filename = self._hook.build_wheel(out_dir, config_settings, metadata_directory) 29 return os.path.join(out_dir, filename) 30