11import dataclasses
22from dataclasses import dataclass
3+ from pathlib import Path
34from typing import Any , Dict , Iterable , List , Literal , Optional , Tuple
45
56from pip ._vendor import tomli_w
@@ -79,7 +80,7 @@ class Package:
7980 # (not supported) tool
8081
8182 @classmethod
82- def from_install_requirement (cls , ireq : InstallRequirement ) -> Self :
83+ def from_install_requirement (cls , ireq : InstallRequirement , base_dir : Path ) -> Self :
8384 assert ireq .name
8485 dist = ireq .get_dist ()
8586 download_info = ireq .download_info
@@ -97,7 +98,11 @@ def from_install_requirement(cls, ireq: InstallRequirement) -> Self:
9798 )
9899 elif isinstance (download_info .info , DirInfo ):
99100 package .directory = PackageDirectory (
100- path = url_to_path (download_info .url ),
101+ path = (
102+ Path (url_to_path (download_info .url ))
103+ .relative_to (base_dir , walk_up = True )
104+ .as_posix ()
105+ ),
101106 editable = (
102107 download_info .info .editable
103108 if download_info .info .editable
@@ -156,12 +161,12 @@ def as_toml(self) -> str:
156161
157162 @classmethod
158163 def from_install_requirements (
159- cls , install_requirements : Iterable [InstallRequirement ]
164+ cls , install_requirements : Iterable [InstallRequirement ], base_dir : Path
160165 ) -> Self :
161166 return cls (
162167 packages = sorted (
163168 (
164- Package .from_install_requirement (ireq )
169+ Package .from_install_requirement (ireq , base_dir )
165170 for ireq in install_requirements
166171 ),
167172 key = lambda p : p .name ,
0 commit comments