def install(self, requirements: Iterable[str], shared: bool = False) -> None: missing = self.check_requirements(requirements) if not missing: return path = self._prefix.shared if shared else self._prefix.overlay with tempfile.NamedTemporaryFile("w+", prefix="pdm-build-reqs-", suffix=".txt", delete=False) as req_file: req_file.write(os.linesep.join(missing)) req_file.close() cmd = self._env.pip_command + [ "install", "--ignore-installed", "--prefix", path, ] cmd.extend(prepare_pip_source_args(self._env.project.sources)) cmd.extend(["-r", req_file.name]) self.subprocess_runner(cmd, isolated=False) os.unlink(req_file.name) if shared: # The shared env is prepared and is safe to be cached now. This is to make # sure no broken env is returned when run in parallel mode. key = hash(frozenset(requirements)) if key not in self._shared_envs: self._shared_envs[key] = path
def install(self, requirements: Iterable[str]) -> None: missing = self.check_requirements(requirements) if not missing: return with tempfile.NamedTemporaryFile( "w+", prefix="pdm-build-reqs-", suffix=".txt", delete=False ) as req_file: req_file.write(os.linesep.join(missing)) req_file.close() cmd = self._env.pip_command + [ "install", "--ignore-installed", "--prefix", self._path, ] cmd.extend(prepare_pip_source_args(self._env.project.sources)) cmd.extend(["-r", req_file.name]) self.subprocess_runner(cmd, isolated=False) os.unlink(req_file.name)
def test_prepare_pip_source_args(sources, pip_args, expected): assert utils.prepare_pip_source_args(sources, pip_args) == expected