11import  dataclasses 
22from  dataclasses  import  dataclass 
3+ from  pathlib  import  Path 
34from  typing  import  Any , Dict , Iterable , List , Optional , Tuple 
45
56from  pip ._vendor  import  tomli_w 
@@ -79,7 +80,7 @@ class Package:
7980    # (not supported) tool: Optional[Dict[str, Any]] 
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        dist  =  ireq .get_dist ()
8485        download_info  =  ireq .download_info 
8586        assert  download_info 
@@ -96,7 +97,11 @@ def from_install_requirement(cls, ireq: InstallRequirement) -> Self:
9697                )
9798            elif  isinstance (download_info .info , DirInfo ):
9899                package .directory  =  PackageDirectory (
99-                     path = url_to_path (download_info .url ),
100+                     path = (
101+                         Path (url_to_path (download_info .url ))
102+                         .relative_to (base_dir , walk_up = True )
103+                         .as_posix ()
104+                     ),
100105                    editable = (
101106                        download_info .info .editable 
102107                        if  download_info .info .editable 
@@ -155,12 +160,12 @@ def as_toml(self) -> str:
155160
156161    @classmethod  
157162    def  from_install_requirements (
158-         cls , install_requirements : Iterable [InstallRequirement ]
163+         cls , install_requirements : Iterable [InstallRequirement ],  base_dir :  Path 
159164    ) ->  Self :
160165        return  cls (
161166            packages = sorted (
162167                (
163-                     Package .from_install_requirement (ireq )
168+                     Package .from_install_requirement (ireq ,  base_dir )
164169                    for  ireq  in  install_requirements 
165170                ),
166171                key = lambda  p : p .name ,
0 commit comments