예제 #1
0
파일: base.py 프로젝트: danieleades/pdm
 def get_shared_env(cls, key: int) -> str:
     if key in cls._shared_envs:
         logger.debug("Reusing shared build env: %s", cls._shared_envs[key])
         return cls._shared_envs[key]
     # We don't save the cache here, instead it will be done after the installation
     # finished.
     return create_tracked_tempdir("-shared", "pdm-build-env-")
예제 #2
0
 def prepare_metadata(self) -> Distribution:
     """Prepare the metadata for the candidate.
     Will call the prepare_metadata_* hooks behind the scene
     """
     self.obtain(allow_all=True)
     metadir_parent = create_tracked_tempdir(prefix="pdm-meta-")
     result: Distribution
     if self.wheel:
         self._metadata_dir = _get_wheel_metadata_from_wheel(
             self.wheel, metadir_parent)
         result = PathDistribution(Path(self._metadata_dir))
     else:
         source_dir = self.ireq.unpacked_source_directory
         builder = EditableBuilder if self.req.editable else WheelBuilder
         try:
             self._metadata_dir = builder(
                 source_dir,
                 self.environment).prepare_metadata(metadir_parent)
         except BuildError:
             termui.logger.warn(
                 "Failed to build package, try parsing project files.")
             result = parse_metadata_from_source(source_dir)
         else:
             result = PathDistribution(Path(self._metadata_dir))
     if not self.candidate.name:
         self.req.name = self.candidate.name = cast(str,
                                                    result.metadata["Name"])
     if not self.candidate.version:
         self.candidate.version = result.version
     if not self.candidate.requires_python:
         self.candidate.requires_python = cast(
             str, result.metadata.get("Requires-Python", ""))
     return result
예제 #3
0
 def _get_wheel_dir(self) -> str:
     assert self.ireq.original_link
     if self.should_cache():
         wheel_cache = self.environment.project.make_wheel_cache()
         return wheel_cache.get_path_for_link(self.ireq.original_link)
     else:
         return create_tracked_tempdir(prefix="pdm-wheel-")
예제 #4
0
 def metadata(self) -> Distribution:
     """Get the metadata of the candidate.
     Will call the prepare_metadata_* hooks behind the scene
     """
     self.prepare(True)
     metadir_parent = create_tracked_tempdir(prefix="pdm-meta-")
     if self.wheel:
         self._metadata_dir = _get_wheel_metadata_from_wheel(
             self.wheel, metadir_parent)
         result: Distribution = PathDistribution(Path(self._metadata_dir))
     else:
         assert self.source_dir
         builder = EditableBuilder if self.req.editable else WheelBuilder
         try:
             self._metadata_dir = builder(
                 self.source_dir,
                 self.environment).prepare_metadata(metadir_parent)
         except BuildError:
             termui.logger.warn(
                 "Failed to build package, try parsing project files.")
             result = parse_metadata_from_source(self.source_dir)
         else:
             result = PathDistribution(Path(self._metadata_dir))
     if not self.name:
         self.name = str(result.metadata["Name"])  # type: ignore
         self.req.name = self.name
     if not self.version:
         self.version = result.version  # type: ignore
     self.requires_python = result.metadata.get("Requires-Python")
     return result
예제 #5
0
 def _get_source_dir(self) -> str:
     build_dir = self.packages_path
     if build_dir:
         src_dir = build_dir / "src"
         src_dir.mkdir(exist_ok=True)
         return src_dir.as_posix()
     venv = os.environ.get("VIRTUAL_ENV", None)
     if venv:
         src_dir = os.path.join(venv, "src")
         if os.path.exists(src_dir):
             return src_dir
     return create_tracked_tempdir("pdm-src")
예제 #6
0
 def _make_building_args(self, ireq: pip_shims.InstallRequirement) -> Dict[str, Any]:
     src_dir = ireq.source_dir or self._get_source_dir()
     if ireq.editable:
         build_dir = src_dir
     else:
         build_dir = create_tracked_tempdir(prefix="pdm-build")
     download_dir = self.project.cache("pkgs")
     wheel_download_dir = self.project.cache("wheels")
     return {
         "build_dir": build_dir,
         "src_dir": src_dir,
         "download_dir": download_dir.as_posix(),
         "wheel_download_dir": wheel_download_dir.as_posix(),
     }
예제 #7
0
 def _populate_source_dir(self, ireq: pip_shims.InstallRequirement) -> None:
     assert self.link
     if self.link.is_existing_dir():
         ireq.source_dir = self.link.file_path
     elif self.req.editable:
         if self.environment.packages_path:
             src_dir = self.environment.packages_path / "src"
         elif os.getenv("VIRTUAL_ENV"):
             src_dir = Path(os.environ["VIRTUAL_ENV"]) / "src"
         else:
             src_dir = Path("src")
         if not src_dir.is_dir():
             src_dir.mkdir()
         ireq.ensure_has_source_dir(str(src_dir))
     elif not ireq.source_dir:
         ireq.source_dir = create_tracked_tempdir(prefix="pdm-build-")
예제 #8
0
 def _get_wheel_dir(self) -> str:
     should_cache = False
     wheel_cache = self.environment.project.make_wheel_cache()
     assert self.link
     if self.link.is_vcs and not self.req.editable:
         vcs = pip_shims.VcsSupport()
         vcs_backend = vcs.get_backend_for_scheme(self.link.scheme)
         if vcs_backend and vcs_backend.is_immutable_rev_checkout(
                 self.link.url, cast(str, self.ireq.source_dir)):
             should_cache = True
     elif not self.link.is_existing_dir():
         base, _ = self.link.splitext()
         if _egg_info_re.search(base) is not None:
             # Determine whether the string looks like an egg_info.
             should_cache = True
     if should_cache:
         return wheel_cache.get_path_for_link(self.link)
     else:
         return create_tracked_tempdir(prefix="pdm-wheel-")
예제 #9
0
 def _populate_source_dir(self) -> None:
     ireq = self.ireq
     assert ireq.original_link
     if ireq.original_link.is_existing_dir():
         ireq.source_dir = ireq.original_link.file_path
     elif self.req.editable:
         if self.environment.packages_path:
             src_dir = self.environment.packages_path / "src"
         else:
             venv_prefix = get_venv_like_prefix(
                 self.environment.interpreter.executable)
             if venv_prefix is not None:
                 src_dir = venv_prefix / "src"
             else:
                 src_dir = Path("src")
         if not src_dir.is_dir():
             src_dir.mkdir()
         ireq.ensure_has_source_dir(str(src_dir))
     elif not ireq.source_dir:
         ireq.source_dir = create_tracked_tempdir(prefix="pdm-build-")
예제 #10
0
파일: base.py 프로젝트: pi-dal/pdm
 def get_env_path(cls, src_dir: str | Path) -> str:
     key = os.path.normpath(src_dir).rstrip("\\/")
     if key not in cls._env_cache:
         cls._env_cache[key] = create_tracked_tempdir(
             prefix="pdm-build-env-")
     return cls._env_cache[key]
예제 #11
0
 def _get_build_dir(self, ireq: pip_shims.InstallRequirement) -> str:
     if ireq.editable:
         return ireq.source_dir or self._get_source_dir()
     else:
         return create_tracked_tempdir(prefix="pdm-build-")
예제 #12
0
파일: base.py 프로젝트: pawamoy/pdm
 def get_overlay_env(cls, key: str) -> str:
     if key not in cls._overlay_envs:
         cls._overlay_envs[key] = create_tracked_tempdir(
             "-overlay", "pdm-build-env-")
     return cls._overlay_envs[key]
예제 #13
0
파일: base.py 프로젝트: pawamoy/pdm
 def get_shared_env(cls, key: int) -> str:
     if key in cls._shared_envs:
         logger.debug("Reusing shared build env: %s", cls._shared_envs[key])
         return cls._shared_envs[key]
     # Postpone the cache after installation is done
     return create_tracked_tempdir("-shared", "pdm-build-env-")
예제 #14
0
 def _get_build_dir(self, ireq: pip_shims.InstallRequirement) -> str:
     if ireq.editable or ireq.link and ireq.link.is_existing_dir():
         return self._get_source_dir(ireq)
     else:
         return create_tracked_tempdir(prefix="pdm-build-")