1
1
import dataclasses
2
2
from dataclasses import dataclass
3
+ from pathlib import Path
3
4
from typing import Any , Dict , Iterable , List , Optional , Tuple
4
5
5
6
from pip ._vendor import tomli_w
@@ -79,7 +80,7 @@ class Package:
79
80
# (not supported) tool: Optional[Dict[str, Any]]
80
81
81
82
@classmethod
82
- def from_install_requirement (cls , ireq : InstallRequirement ) -> Self :
83
+ def from_install_requirement (cls , ireq : InstallRequirement , base_dir : Path ) -> Self :
83
84
dist = ireq .get_dist ()
84
85
download_info = ireq .download_info
85
86
assert download_info
@@ -96,7 +97,11 @@ def from_install_requirement(cls, ireq: InstallRequirement) -> Self:
96
97
)
97
98
elif isinstance (download_info .info , DirInfo ):
98
99
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
+ ),
100
105
editable = (
101
106
download_info .info .editable
102
107
if download_info .info .editable
@@ -155,12 +160,12 @@ def as_toml(self) -> str:
155
160
156
161
@classmethod
157
162
def from_install_requirements (
158
- cls , install_requirements : Iterable [InstallRequirement ]
163
+ cls , install_requirements : Iterable [InstallRequirement ], base_dir : Path
159
164
) -> Self :
160
165
return cls (
161
166
packages = sorted (
162
167
(
163
- Package .from_install_requirement (ireq )
168
+ Package .from_install_requirement (ireq , base_dir )
164
169
for ireq in install_requirements
165
170
),
166
171
key = lambda p : p .name ,
0 commit comments