Skip to content

Commit 1f48ca3

Browse files
committed
Support per requirement options for editables too
1 parent a289707 commit 1f48ca3

File tree

2 files changed

+26
-23
lines changed

2 files changed

+26
-23
lines changed

news/12480.feature.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Support per requirement options for editable installs.

src/pip/_internal/req/req_file.py

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,16 @@
7575
cmdoptions.config_settings,
7676
]
7777

78+
SUPPORTED_OPTIONS_EDITABLE_REQ: List[Callable[..., optparse.Option]] = [
79+
cmdoptions.config_settings,
80+
]
81+
82+
7883
# the 'dest' string values
7984
SUPPORTED_OPTIONS_REQ_DEST = [str(o().dest) for o in SUPPORTED_OPTIONS_REQ]
85+
SUPPORTED_OPTIONS_EDITABLE_REQ_DEST = [
86+
str(o().dest) for o in SUPPORTED_OPTIONS_EDITABLE_REQ
87+
]
8088

8189
logger = logging.getLogger(__name__)
8290

@@ -178,31 +186,25 @@ def handle_requirement_line(
178186

179187
assert line.is_requirement
180188

189+
# get the options that apply to requirements
181190
if line.is_editable:
182-
# For editable requirements, we don't support per-requirement
183-
# options, so just return the parsed requirement.
184-
return ParsedRequirement(
185-
requirement=line.requirement,
186-
is_editable=line.is_editable,
187-
comes_from=line_comes_from,
188-
constraint=line.constraint,
189-
)
191+
supported_dest = SUPPORTED_OPTIONS_EDITABLE_REQ_DEST
190192
else:
191-
# get the options that apply to requirements
192-
req_options = {}
193-
for dest in SUPPORTED_OPTIONS_REQ_DEST:
194-
if dest in line.opts.__dict__ and line.opts.__dict__[dest]:
195-
req_options[dest] = line.opts.__dict__[dest]
196-
197-
line_source = f"line {line.lineno} of {line.filename}"
198-
return ParsedRequirement(
199-
requirement=line.requirement,
200-
is_editable=line.is_editable,
201-
comes_from=line_comes_from,
202-
constraint=line.constraint,
203-
options=req_options,
204-
line_source=line_source,
205-
)
193+
supported_dest = SUPPORTED_OPTIONS_REQ_DEST
194+
req_options = {}
195+
for dest in supported_dest:
196+
if dest in line.opts.__dict__ and line.opts.__dict__[dest]:
197+
req_options[dest] = line.opts.__dict__[dest]
198+
199+
line_source = f"line {line.lineno} of {line.filename}"
200+
return ParsedRequirement(
201+
requirement=line.requirement,
202+
is_editable=line.is_editable,
203+
comes_from=line_comes_from,
204+
constraint=line.constraint,
205+
options=req_options,
206+
line_source=line_source,
207+
)
206208

207209

208210
def handle_option_line(

0 commit comments

Comments
 (0)