Skip to content

Commit b137521

Browse files
authored
Merge pull request #4953 from pypa/debt/917/remove-legacy-editable
Removed support for the 'legacy-editable' feature.
2 parents 8e4868a + f89e652 commit b137521

File tree

4 files changed

+26
-68
lines changed

4 files changed

+26
-68
lines changed

docs/userguide/development_mode.rst

-7
Original file line numberDiff line numberDiff line change
@@ -197,13 +197,6 @@ works (still within the context of :pep:`660`).
197197
Users are encouraged to try out the new editable installation techniques
198198
and make the necessary adaptations.
199199

200-
.. note::
201-
Newer versions of ``pip`` no longer run the fallback command
202-
``python setup.py develop`` when the ``pyproject.toml`` file is present.
203-
This means that setting the environment variable
204-
``SETUPTOOLS_ENABLE_FEATURES="legacy-editable"``
205-
will have no effect when installing a package with ``pip``.
206-
207200

208201
How editable installations work
209202
-------------------------------

newsfragments/917.removal.rst

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Removed support for 'legacy-editable' installs.

setuptools/build_meta.py

+25-37
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,6 @@
6767
'SetupRequirementsError',
6868
]
6969

70-
SETUPTOOLS_ENABLE_FEATURES = os.getenv("SETUPTOOLS_ENABLE_FEATURES", "").lower()
71-
LEGACY_EDITABLE = "legacy-editable" in SETUPTOOLS_ENABLE_FEATURES.replace("_", "-")
72-
7370

7471
class SetupRequirementsError(BaseException):
7572
def __init__(self, specifiers) -> None:
@@ -457,37 +454,30 @@ def _get_dist_info_dir(self, metadata_directory: StrPath | None) -> str | None:
457454
assert len(dist_info_candidates) <= 1
458455
return str(dist_info_candidates[0]) if dist_info_candidates else None
459456

460-
if not LEGACY_EDITABLE:
461-
# PEP660 hooks:
462-
# build_editable
463-
# get_requires_for_build_editable
464-
# prepare_metadata_for_build_editable
465-
def build_editable(
466-
self,
467-
wheel_directory: StrPath,
468-
config_settings: _ConfigSettings = None,
469-
metadata_directory: StrPath | None = None,
470-
):
471-
# XXX can or should we hide our editable_wheel command normally?
472-
info_dir = self._get_dist_info_dir(metadata_directory)
473-
opts = ["--dist-info-dir", info_dir] if info_dir else []
474-
cmd = ["editable_wheel", *opts, *self._editable_args(config_settings)]
475-
with suppress_known_deprecation():
476-
return self._build_with_temp_dir(
477-
cmd, ".whl", wheel_directory, config_settings
478-
)
457+
def build_editable(
458+
self,
459+
wheel_directory: StrPath,
460+
config_settings: _ConfigSettings = None,
461+
metadata_directory: StrPath | None = None,
462+
):
463+
# XXX can or should we hide our editable_wheel command normally?
464+
info_dir = self._get_dist_info_dir(metadata_directory)
465+
opts = ["--dist-info-dir", info_dir] if info_dir else []
466+
cmd = ["editable_wheel", *opts, *self._editable_args(config_settings)]
467+
with suppress_known_deprecation():
468+
return self._build_with_temp_dir(
469+
cmd, ".whl", wheel_directory, config_settings
470+
)
479471

480-
def get_requires_for_build_editable(
481-
self, config_settings: _ConfigSettings = None
482-
):
483-
return self.get_requires_for_build_wheel(config_settings)
472+
def get_requires_for_build_editable(self, config_settings: _ConfigSettings = None):
473+
return self.get_requires_for_build_wheel(config_settings)
484474

485-
def prepare_metadata_for_build_editable(
486-
self, metadata_directory: StrPath, config_settings: _ConfigSettings = None
487-
):
488-
return self.prepare_metadata_for_build_wheel(
489-
metadata_directory, config_settings
490-
)
475+
def prepare_metadata_for_build_editable(
476+
self, metadata_directory: StrPath, config_settings: _ConfigSettings = None
477+
):
478+
return self.prepare_metadata_for_build_wheel(
479+
metadata_directory, config_settings
480+
)
491481

492482

493483
class _BuildMetaLegacyBackend(_BuildMetaBackend):
@@ -549,11 +539,9 @@ class _IncompatibleBdistWheel(SetuptoolsDeprecationWarning):
549539
prepare_metadata_for_build_wheel = _BACKEND.prepare_metadata_for_build_wheel
550540
build_wheel = _BACKEND.build_wheel
551541
build_sdist = _BACKEND.build_sdist
552-
553-
if not LEGACY_EDITABLE:
554-
get_requires_for_build_editable = _BACKEND.get_requires_for_build_editable
555-
prepare_metadata_for_build_editable = _BACKEND.prepare_metadata_for_build_editable
556-
build_editable = _BACKEND.build_editable
542+
get_requires_for_build_editable = _BACKEND.get_requires_for_build_editable
543+
prepare_metadata_for_build_editable = _BACKEND.prepare_metadata_for_build_editable
544+
build_editable = _BACKEND.build_editable
557545

558546

559547
# The legacy backend

setuptools/tests/test_build_meta.py

-24
Original file line numberDiff line numberDiff line change
@@ -936,30 +936,6 @@ def test_sys_argv_passthrough(self, tmpdir_cwd):
936936
build_backend.build_sdist("temp")
937937

938938

939-
def test_legacy_editable_install(venv, tmpdir, tmpdir_cwd):
940-
pyproject = """
941-
[build-system]
942-
requires = ["setuptools"]
943-
build-backend = "setuptools.build_meta"
944-
[project]
945-
name = "myproj"
946-
version = "42"
947-
"""
948-
path.build({"pyproject.toml": DALS(pyproject), "mymod.py": ""})
949-
950-
# First: sanity check
951-
cmd = ["pip", "install", "--no-build-isolation", "-e", "."]
952-
output = venv.run(cmd, cwd=tmpdir).lower()
953-
assert "running setup.py develop for myproj" not in output
954-
assert "created wheel for myproj" in output
955-
956-
# Then: real test
957-
env = {**os.environ, "SETUPTOOLS_ENABLE_FEATURES": "legacy-editable"}
958-
cmd = ["pip", "install", "--no-build-isolation", "-e", "."]
959-
output = venv.run(cmd, cwd=tmpdir, env=env).lower()
960-
assert "running setup.py develop for myproj" in output
961-
962-
963939
@pytest.mark.filterwarnings("ignore::setuptools.SetuptoolsDeprecationWarning")
964940
def test_sys_exit_0_in_setuppy(monkeypatch, tmp_path):
965941
"""Setuptools should be resilient to setup.py with ``sys.exit(0)`` (#3973)."""

0 commit comments

Comments
 (0)