From 312cf1573e455a4820bb482757e9bc87d3fae84e Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Thu, 21 Mar 2024 15:41:31 -0400 Subject: [PATCH] chore: use uv pip compile (#1778) --- cibuildwheel/options.py | 1 + .../resources/constraints-python310.txt | 20 ++---- .../resources/constraints-python311.txt | 16 +---- .../resources/constraints-python312.txt | 16 +---- .../resources/constraints-python37.txt | 16 +---- .../resources/constraints-python38.txt | 18 ++--- .../resources/constraints-python39.txt | 18 ++--- cibuildwheel/resources/constraints.txt | 16 +---- noxfile.py | 69 +++++++++---------- 9 files changed, 60 insertions(+), 130 deletions(-) diff --git a/cibuildwheel/options.py b/cibuildwheel/options.py index a69664554..519917d87 100644 --- a/cibuildwheel/options.py +++ b/cibuildwheel/options.py @@ -215,6 +215,7 @@ def _resolve_cascade( return result +# pylint: disable-next=inconsistent-return-statements def _merge_values(before: str | None, after: str, rule: InheritRule, merge_sep: str | None) -> str: if rule == InheritRule.NONE: return after diff --git a/cibuildwheel/resources/constraints-python310.txt b/cibuildwheel/resources/constraints-python310.txt index 2c8f5b4cb..0600b10e0 100644 --- a/cibuildwheel/resources/constraints-python310.txt +++ b/cibuildwheel/resources/constraints-python310.txt @@ -1,21 +1,18 @@ -# -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: -# -# nox -s update_constraints-3.10 -# +# This file was autogenerated by uv via the following command: +# nox -s update_constraints build==1.1.1 - # via -r cibuildwheel/resources/constraints.in delocate==0.10.7 - # via -r cibuildwheel/resources/constraints.in distlib==0.3.8 # via virtualenv filelock==3.13.1 # via virtualenv +importlib-metadata==7.1.0 + # via build packaging==24.0 # via # build # delocate +pip==24.0 platformdirs==4.2.0 # via virtualenv pyproject-hooks==1.0.0 @@ -27,8 +24,5 @@ tomli==2.0.1 typing-extensions==4.10.0 # via delocate virtualenv==20.25.1 - # via -r cibuildwheel/resources/constraints.in - -# The following packages are considered to be unsafe in a requirements file: -pip==24.0 - # via -r cibuildwheel/resources/constraints.in +zipp==3.18.1 + # via importlib-metadata diff --git a/cibuildwheel/resources/constraints-python311.txt b/cibuildwheel/resources/constraints-python311.txt index 8ecebf837..d8a5a79f7 100644 --- a/cibuildwheel/resources/constraints-python311.txt +++ b/cibuildwheel/resources/constraints-python311.txt @@ -1,13 +1,7 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# nox -s update_constraints-3.11 -# +# This file was autogenerated by uv via the following command: +# nox -s update_constraints build==1.1.1 - # via -r cibuildwheel/resources/constraints.in delocate==0.10.7 - # via -r cibuildwheel/resources/constraints.in distlib==0.3.8 # via virtualenv filelock==3.13.1 @@ -16,6 +10,7 @@ packaging==24.0 # via # build # delocate +pip==24.0 platformdirs==4.2.0 # via virtualenv pyproject-hooks==1.0.0 @@ -23,8 +18,3 @@ pyproject-hooks==1.0.0 typing-extensions==4.10.0 # via delocate virtualenv==20.25.1 - # via -r cibuildwheel/resources/constraints.in - -# The following packages are considered to be unsafe in a requirements file: -pip==24.0 - # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python312.txt b/cibuildwheel/resources/constraints-python312.txt index 596c8641b..d8a5a79f7 100644 --- a/cibuildwheel/resources/constraints-python312.txt +++ b/cibuildwheel/resources/constraints-python312.txt @@ -1,13 +1,7 @@ -# -# This file is autogenerated by pip-compile with Python 3.12 -# by the following command: -# -# nox -s update_constraints-3.12 -# +# This file was autogenerated by uv via the following command: +# nox -s update_constraints build==1.1.1 - # via -r cibuildwheel/resources/constraints.in delocate==0.10.7 - # via -r cibuildwheel/resources/constraints.in distlib==0.3.8 # via virtualenv filelock==3.13.1 @@ -16,6 +10,7 @@ packaging==24.0 # via # build # delocate +pip==24.0 platformdirs==4.2.0 # via virtualenv pyproject-hooks==1.0.0 @@ -23,8 +18,3 @@ pyproject-hooks==1.0.0 typing-extensions==4.10.0 # via delocate virtualenv==20.25.1 - # via -r cibuildwheel/resources/constraints.in - -# The following packages are considered to be unsafe in a requirements file: -pip==24.0 - # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python37.txt b/cibuildwheel/resources/constraints-python37.txt index aa4731e83..273c799f5 100644 --- a/cibuildwheel/resources/constraints-python37.txt +++ b/cibuildwheel/resources/constraints-python37.txt @@ -1,13 +1,7 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# nox -s update_constraints-3.7 -# +# This file was autogenerated by uv via the following command: +# nox -s update_constraints build==1.1.1 - # via -r cibuildwheel/resources/constraints.in delocate==0.10.7 - # via -r cibuildwheel/resources/constraints.in distlib==0.3.8 # via virtualenv filelock==3.12.2 @@ -20,6 +14,7 @@ packaging==24.0 # via # build # delocate +pip==24.0 platformdirs==4.0.0 # via virtualenv pyproject-hooks==1.0.0 @@ -34,10 +29,5 @@ typing-extensions==4.7.1 # importlib-metadata # platformdirs virtualenv==20.25.1 - # via -r cibuildwheel/resources/constraints.in zipp==3.15.0 # via importlib-metadata - -# The following packages are considered to be unsafe in a requirements file: -pip==24.0 - # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python38.txt b/cibuildwheel/resources/constraints-python38.txt index d8a3de47b..0600b10e0 100644 --- a/cibuildwheel/resources/constraints-python38.txt +++ b/cibuildwheel/resources/constraints-python38.txt @@ -1,23 +1,18 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# nox -s update_constraints-3.8 -# +# This file was autogenerated by uv via the following command: +# nox -s update_constraints build==1.1.1 - # via -r cibuildwheel/resources/constraints.in delocate==0.10.7 - # via -r cibuildwheel/resources/constraints.in distlib==0.3.8 # via virtualenv filelock==3.13.1 # via virtualenv -importlib-metadata==7.0.2 +importlib-metadata==7.1.0 # via build packaging==24.0 # via # build # delocate +pip==24.0 platformdirs==4.2.0 # via virtualenv pyproject-hooks==1.0.0 @@ -29,10 +24,5 @@ tomli==2.0.1 typing-extensions==4.10.0 # via delocate virtualenv==20.25.1 - # via -r cibuildwheel/resources/constraints.in zipp==3.18.1 # via importlib-metadata - -# The following packages are considered to be unsafe in a requirements file: -pip==24.0 - # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python39.txt b/cibuildwheel/resources/constraints-python39.txt index a5aba2465..0600b10e0 100644 --- a/cibuildwheel/resources/constraints-python39.txt +++ b/cibuildwheel/resources/constraints-python39.txt @@ -1,23 +1,18 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# nox -s update_constraints-3.9 -# +# This file was autogenerated by uv via the following command: +# nox -s update_constraints build==1.1.1 - # via -r cibuildwheel/resources/constraints.in delocate==0.10.7 - # via -r cibuildwheel/resources/constraints.in distlib==0.3.8 # via virtualenv filelock==3.13.1 # via virtualenv -importlib-metadata==7.0.2 +importlib-metadata==7.1.0 # via build packaging==24.0 # via # build # delocate +pip==24.0 platformdirs==4.2.0 # via virtualenv pyproject-hooks==1.0.0 @@ -29,10 +24,5 @@ tomli==2.0.1 typing-extensions==4.10.0 # via delocate virtualenv==20.25.1 - # via -r cibuildwheel/resources/constraints.in zipp==3.18.1 # via importlib-metadata - -# The following packages are considered to be unsafe in a requirements file: -pip==24.0 - # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints.txt b/cibuildwheel/resources/constraints.txt index 596c8641b..d8a5a79f7 100644 --- a/cibuildwheel/resources/constraints.txt +++ b/cibuildwheel/resources/constraints.txt @@ -1,13 +1,7 @@ -# -# This file is autogenerated by pip-compile with Python 3.12 -# by the following command: -# -# nox -s update_constraints-3.12 -# +# This file was autogenerated by uv via the following command: +# nox -s update_constraints build==1.1.1 - # via -r cibuildwheel/resources/constraints.in delocate==0.10.7 - # via -r cibuildwheel/resources/constraints.in distlib==0.3.8 # via virtualenv filelock==3.13.1 @@ -16,6 +10,7 @@ packaging==24.0 # via # build # delocate +pip==24.0 platformdirs==4.2.0 # via virtualenv pyproject-hooks==1.0.0 @@ -23,8 +18,3 @@ pyproject-hooks==1.0.0 typing-extensions==4.10.0 # via delocate virtualenv==20.25.1 - # via -r cibuildwheel/resources/constraints.in - -# The following packages are considered to be unsafe in a requirements file: -pip==24.0 - # via -r cibuildwheel/resources/constraints.in diff --git a/noxfile.py b/noxfile.py index 8747b91dd..19dbed42b 100644 --- a/noxfile.py +++ b/noxfile.py @@ -9,8 +9,6 @@ nox.options.sessions = ["lint", "pylint", "check_manifest", "tests"] -PYTHON_ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12"] - DIR = Path(__file__).parent.resolve() if os.environ.get("CI", None): @@ -23,7 +21,7 @@ def tests(session: nox.Session) -> None: Run the unit and regular tests. """ unit_test_args = ["--run-docker"] if sys.platform.startswith("linux") else [] - session.install("-e", ".[test]") + session.install("-e.[test]") if session.posargs: session.run("pytest", *session.posargs) else: @@ -46,7 +44,8 @@ def pylint(session: nox.Session) -> None: Run pylint. """ - session.install("pylint", ".") + name = "cibuildwheel @ ." if getattr(session.virtualenv, "venv_backend", "") == "uv" else "." + session.install("pylint", name) session.run("pylint", "cibuildwheel", *session.posargs) @@ -60,32 +59,36 @@ def check_manifest(session: nox.Session) -> None: session.run("check-manifest", *session.posargs) -@nox.session(python=PYTHON_ALL_VERSIONS) +@nox.session def update_constraints(session: nox.Session) -> None: """ Update the dependencies inplace. """ - session.install("pip-tools") - assert isinstance(session.python, str) - python_version = session.python.replace(".", "") - env = os.environ.copy() - # CUSTOM_COMPILE_COMMAND is a pip-compile option that tells users how to - # regenerate the constraints files - env["CUSTOM_COMPILE_COMMAND"] = f"nox -s {session.name}" - session.run( - "pip-compile", - "--allow-unsafe", - "--upgrade", - "cibuildwheel/resources/constraints.in", - f"--output-file=cibuildwheel/resources/constraints-python{python_version}.txt", - env=env, - ) - if session.python == PYTHON_ALL_VERSIONS[-1]: - RESOURCES = DIR / "cibuildwheel" / "resources" - shutil.copyfile( - RESOURCES / f"constraints-python{python_version}.txt", - RESOURCES / "constraints.txt", + + if getattr(session.virtualenv, "venv_backend", "") != "uv": + session.install("uv>=0.1.23") + + for minor_version in range(7, 13): + python_version = f"3.{minor_version}" + env = os.environ.copy() + # CUSTOM_COMPILE_COMMAND is a pip-compile option that tells users how to + # regenerate the constraints files + env["UV_CUSTOM_COMPILE_COMMAND"] = f"nox -s {session.name}" + session.run( + "uv", + "pip", + "compile", + f"--python-version={python_version}", + "--upgrade", + "cibuildwheel/resources/constraints.in", + f"--output-file=cibuildwheel/resources/constraints-python{python_version.replace('.', '')}.txt", + env=env, ) + RESOURCES = DIR / "cibuildwheel" / "resources" + shutil.copyfile( + RESOURCES / "constraints-python312.txt", + RESOURCES / "constraints.txt", + ) @nox.session @@ -104,7 +107,7 @@ def update_proj(session: nox.Session) -> None: """ Update the README inplace. """ - session.install("-e", ".[bin]") + session.install("-e.[bin]") session.run( "python", "bin/projects.py", @@ -127,18 +130,10 @@ def generate_schema(session: nox.Session) -> None: @nox.session(python="3.9") def docs(session: nox.Session) -> None: """ - Build the docs. + Build the docs. Will serve unless --non-interactive """ - session.install("-e", ".[docs]") - session.run("pip", "list") - - if session.posargs: - if "serve" in session.posargs: - session.run("mkdocs", "serve") - else: - session.error("Unrecognized args, use 'serve'") - else: - session.run("mkdocs", "build") + session.install("-e.[docs]") + session.run("mkdocs", "serve" if session.interactive else "build") @nox.session