From 39393ec98fe2f933538557276c05c6044665a379 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Wed, 5 Jun 2024 07:16:51 +0200 Subject: [PATCH 01/13] CI Remove historic nogil Python 3.9 build --- azure-pipelines.yml | 36 --------- build_tools/azure/install.sh | 10 --- build_tools/azure/python_nogil_lock.txt | 73 ------------------- .../azure/python_nogil_requirements.txt | 20 ----- build_tools/azure/test_docs.sh | 2 +- build_tools/shared.sh | 2 +- doc/developers/contributing.rst | 1 - 7 files changed, 2 insertions(+), 142 deletions(-) delete mode 100644 build_tools/azure/python_nogil_lock.txt delete mode 100644 build_tools/azure/python_nogil_requirements.txt diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 1ce5244124d4d..372b2033ecbe6 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -62,42 +62,6 @@ jobs: SKLEARN_WARNINGS_AS_ERRORS: '1' CHECK_PYTEST_SOFT_DEPENDENCY: 'true' -- template: build_tools/azure/posix-docker.yml - # Experimental CPython branch without the Global Interpreter Lock: - # https://github.com/colesbury/nogil/ - # - # The nogil build relies on a dedicated PyPI-style index to install patched - # versions of NumPy, SciPy and Cython maintained by @colesbury and that - # include specific fixes to make them run correctly without relying on the GIL. - # - # The goal of this CI entry is to make sure that we do not introduce any - # dependency on the GIL in scikit-learn itself. An auxiliary goal is to early - # detect any regression in the patched build dependencies to report them - # upstream. The long-term goal is to be able to stop having to maintain - # multiprocessing based workaround / hacks in joblib / loky to make multi-CPU - # computing in scikit-learn efficient by default using regular threads. - # - # If this experimental entry becomes too unstable, feel free to disable it. - parameters: - name: Linux_nogil - vmImage: ubuntu-20.04 - dependsOn: [git_commit, linting] - condition: | - and( - succeeded(), - not(contains(dependencies['git_commit']['outputs']['commit.message'], '[ci skip]')), - or(eq(variables['Build.Reason'], 'Schedule'), - contains(dependencies['git_commit']['outputs']['commit.message'], '[nogil]' - ) - ) - ) - matrix: - pylatest_pip_nogil: - DOCKER_CONTAINER: 'nogil/python' - DISTRIB: 'pip-nogil' - LOCK_FILE: './build_tools/azure/python_nogil_lock.txt' - COVERAGE: 'false' - - job: Linux_Nightly_Pyodide pool: vmImage: ubuntu-22.04 diff --git a/build_tools/azure/install.sh b/build_tools/azure/install.sh index cdaaa0c8cc965..082e5f9e8e675 100755 --- a/build_tools/azure/install.sh +++ b/build_tools/azure/install.sh @@ -65,11 +65,6 @@ python_environment_install_and_activate() { python3 -m virtualenv --system-site-packages --python=python3 $VIRTUALENV source $VIRTUALENV/bin/activate pip install -r "${LOCK_FILE}" - - elif [[ "$DISTRIB" == "pip-nogil" ]]; then - python -m venv $VIRTUALENV - source $VIRTUALENV/bin/activate - pip install -r "${LOCK_FILE}" fi if [[ "$DISTRIB" == "conda-pip-scipy-dev" ]]; then @@ -86,11 +81,6 @@ python_environment_install_and_activate() { pip install https://github.com/joblib/joblib/archive/master.zip echo "Installing pillow from latest sources" pip install https://github.com/python-pillow/Pillow/archive/main.zip - - elif [[ "$DISTRIB" == "pip-nogil" ]]; then - apt-get -yq update - apt-get install -yq ccache - fi } diff --git a/build_tools/azure/python_nogil_lock.txt b/build_tools/azure/python_nogil_lock.txt deleted file mode 100644 index 7f67a48842dea..0000000000000 --- a/build_tools/azure/python_nogil_lock.txt +++ /dev/null @@ -1,73 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --output-file=/scikit-learn/build_tools/azure/python_nogil_lock.txt /scikit-learn/build_tools/azure/python_nogil_requirements.txt -# ---index-url https://d1yxz45j0ypngg.cloudfront.net/ ---extra-index-url https://pypi.org/simple - -contourpy==1.1.1 - # via matplotlib -cycler==0.12.1 - # via matplotlib -cython==3.0.10 - # via -r /scikit-learn/build_tools/azure/python_nogil_requirements.txt -exceptiongroup==1.2.1 - # via pytest -execnet==2.1.1 - # via pytest-xdist -fonttools==4.51.0 - # via matplotlib -iniconfig==2.0.0 - # via pytest -joblib==1.4.2 - # via -r /scikit-learn/build_tools/azure/python_nogil_requirements.txt -kiwisolver==1.4.4 - # via matplotlib -matplotlib==3.6.2 - # via -r /scikit-learn/build_tools/azure/python_nogil_requirements.txt -meson==1.4.0 - # via meson-python -meson-python==0.16.0 - # via -r /scikit-learn/build_tools/azure/python_nogil_requirements.txt -ninja==1.11.1.1 - # via -r /scikit-learn/build_tools/azure/python_nogil_requirements.txt -numpy==1.24.0 - # via - # -r /scikit-learn/build_tools/azure/python_nogil_requirements.txt - # contourpy - # matplotlib - # scipy -packaging==24.0 - # via - # matplotlib - # meson-python - # pyproject-metadata - # pytest -pillow==9.5.0 - # via matplotlib -pluggy==1.5.0 - # via pytest -pyparsing==3.1.2 - # via matplotlib -pyproject-metadata==0.8.0 - # via meson-python -pytest==7.4.4 - # via - # -r /scikit-learn/build_tools/azure/python_nogil_requirements.txt - # pytest-xdist -pytest-xdist==3.6.1 - # via -r /scikit-learn/build_tools/azure/python_nogil_requirements.txt -python-dateutil==2.9.0.post0 - # via matplotlib -scipy==1.9.3 - # via -r /scikit-learn/build_tools/azure/python_nogil_requirements.txt -six==1.16.0 - # via python-dateutil -threadpoolctl==3.5.0 - # via -r /scikit-learn/build_tools/azure/python_nogil_requirements.txt -tomli==2.0.1 - # via - # meson-python - # pytest diff --git a/build_tools/azure/python_nogil_requirements.txt b/build_tools/azure/python_nogil_requirements.txt deleted file mode 100644 index 2cebad9a03b25..0000000000000 --- a/build_tools/azure/python_nogil_requirements.txt +++ /dev/null @@ -1,20 +0,0 @@ -# To generate python_nogil_lock.txt, use the following command: -# docker run -v $PWD:/scikit-learn -it nogil/python bash -c 'pip install pip-tools; pip-compile --upgrade /scikit-learn/build_tools/azure/python_nogil_requirements.txt -o /scikit-learn/build_tools/azure/python_nogil_lock.txt' -# -# The reason behind it is that you need python-nogil to generate the pip lock -# file. Using pip-compile --index and --extra-index will not work, for example -# the latest cython will be picked up from PyPI, rather than the one from the -# python-nogil index -matplotlib -numpy -scipy -cython -joblib -threadpoolctl -# TODO: somehow pytest 8 does not seem to work with meson editable -# install. Exit code is 5, i.e. no test collected -# This would be fixed by https://github.com/mesonbuild/meson-python/pull/569 -pytest<8 -pytest-xdist -meson-python -ninja diff --git a/build_tools/azure/test_docs.sh b/build_tools/azure/test_docs.sh index 61e855425786b..b3a5ec97c4d6a 100755 --- a/build_tools/azure/test_docs.sh +++ b/build_tools/azure/test_docs.sh @@ -4,7 +4,7 @@ set -e if [[ "$DISTRIB" =~ ^conda.* ]]; then source activate $VIRTUALENV -elif [[ "$DISTRIB" == "ubuntu" || "$DISTRIB" == "pip-nogil" ]]; then +elif [[ "$DISTRIB" == "ubuntu" ]]; then source $VIRTUALENV/bin/activate fi diff --git a/build_tools/shared.sh b/build_tools/shared.sh index 4866c149d506f..dd4b0856050a7 100644 --- a/build_tools/shared.sh +++ b/build_tools/shared.sh @@ -29,7 +29,7 @@ show_installed_libraries(){ activate_environment() { if [[ "$DISTRIB" =~ ^conda.* ]]; then source activate $VIRTUALENV - elif [[ "$DISTRIB" == "ubuntu" || "$DISTRIB" == "debian-32" || "$DISTRIB" == "pip-nogil" ]]; then + elif [[ "$DISTRIB" == "ubuntu" || "$DISTRIB" == "debian-32" ]]; then source $VIRTUALENV/bin/activate fi } diff --git a/doc/developers/contributing.rst b/doc/developers/contributing.rst index 8c8d478e6d6f5..f46051175b82d 100644 --- a/doc/developers/contributing.rst +++ b/doc/developers/contributing.rst @@ -518,7 +518,6 @@ Commit Message Marker Action Taken by CI [cd build cirrus] CD is run only for Cirrus CI [lint skip] Azure pipeline skips linting [scipy-dev] Build & test with our dependencies (numpy, scipy, etc.) development builds -[nogil] Build & test with the nogil experimental branches of CPython, Cython, NumPy, SciPy, ... [pyodide] Build & test with Pyodide [azure parallel] Run Azure CI jobs in parallel [cirrus arm] Run Cirrus CI ARM test From 3b3d1696487a258a2fe50b100c97bdb6ed38d498 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Wed, 5 Jun 2024 11:15:30 +0200 Subject: [PATCH 02/13] Revert "CI Remove historic nogil Python 3.9 build" This reverts commit 39393ec98fe2f933538557276c05c6044665a379. --- azure-pipelines.yml | 36 +++++++++ build_tools/azure/install.sh | 10 +++ build_tools/azure/python_nogil_lock.txt | 73 +++++++++++++++++++ .../azure/python_nogil_requirements.txt | 20 +++++ build_tools/azure/test_docs.sh | 2 +- build_tools/shared.sh | 2 +- doc/developers/contributing.rst | 1 + 7 files changed, 142 insertions(+), 2 deletions(-) create mode 100644 build_tools/azure/python_nogil_lock.txt create mode 100644 build_tools/azure/python_nogil_requirements.txt diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 372b2033ecbe6..1ce5244124d4d 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -62,6 +62,42 @@ jobs: SKLEARN_WARNINGS_AS_ERRORS: '1' CHECK_PYTEST_SOFT_DEPENDENCY: 'true' +- template: build_tools/azure/posix-docker.yml + # Experimental CPython branch without the Global Interpreter Lock: + # https://github.com/colesbury/nogil/ + # + # The nogil build relies on a dedicated PyPI-style index to install patched + # versions of NumPy, SciPy and Cython maintained by @colesbury and that + # include specific fixes to make them run correctly without relying on the GIL. + # + # The goal of this CI entry is to make sure that we do not introduce any + # dependency on the GIL in scikit-learn itself. An auxiliary goal is to early + # detect any regression in the patched build dependencies to report them + # upstream. The long-term goal is to be able to stop having to maintain + # multiprocessing based workaround / hacks in joblib / loky to make multi-CPU + # computing in scikit-learn efficient by default using regular threads. + # + # If this experimental entry becomes too unstable, feel free to disable it. + parameters: + name: Linux_nogil + vmImage: ubuntu-20.04 + dependsOn: [git_commit, linting] + condition: | + and( + succeeded(), + not(contains(dependencies['git_commit']['outputs']['commit.message'], '[ci skip]')), + or(eq(variables['Build.Reason'], 'Schedule'), + contains(dependencies['git_commit']['outputs']['commit.message'], '[nogil]' + ) + ) + ) + matrix: + pylatest_pip_nogil: + DOCKER_CONTAINER: 'nogil/python' + DISTRIB: 'pip-nogil' + LOCK_FILE: './build_tools/azure/python_nogil_lock.txt' + COVERAGE: 'false' + - job: Linux_Nightly_Pyodide pool: vmImage: ubuntu-22.04 diff --git a/build_tools/azure/install.sh b/build_tools/azure/install.sh index 082e5f9e8e675..cdaaa0c8cc965 100755 --- a/build_tools/azure/install.sh +++ b/build_tools/azure/install.sh @@ -65,6 +65,11 @@ python_environment_install_and_activate() { python3 -m virtualenv --system-site-packages --python=python3 $VIRTUALENV source $VIRTUALENV/bin/activate pip install -r "${LOCK_FILE}" + + elif [[ "$DISTRIB" == "pip-nogil" ]]; then + python -m venv $VIRTUALENV + source $VIRTUALENV/bin/activate + pip install -r "${LOCK_FILE}" fi if [[ "$DISTRIB" == "conda-pip-scipy-dev" ]]; then @@ -81,6 +86,11 @@ python_environment_install_and_activate() { pip install https://github.com/joblib/joblib/archive/master.zip echo "Installing pillow from latest sources" pip install https://github.com/python-pillow/Pillow/archive/main.zip + + elif [[ "$DISTRIB" == "pip-nogil" ]]; then + apt-get -yq update + apt-get install -yq ccache + fi } diff --git a/build_tools/azure/python_nogil_lock.txt b/build_tools/azure/python_nogil_lock.txt new file mode 100644 index 0000000000000..7f67a48842dea --- /dev/null +++ b/build_tools/azure/python_nogil_lock.txt @@ -0,0 +1,73 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --output-file=/scikit-learn/build_tools/azure/python_nogil_lock.txt /scikit-learn/build_tools/azure/python_nogil_requirements.txt +# +--index-url https://d1yxz45j0ypngg.cloudfront.net/ +--extra-index-url https://pypi.org/simple + +contourpy==1.1.1 + # via matplotlib +cycler==0.12.1 + # via matplotlib +cython==3.0.10 + # via -r /scikit-learn/build_tools/azure/python_nogil_requirements.txt +exceptiongroup==1.2.1 + # via pytest +execnet==2.1.1 + # via pytest-xdist +fonttools==4.51.0 + # via matplotlib +iniconfig==2.0.0 + # via pytest +joblib==1.4.2 + # via -r /scikit-learn/build_tools/azure/python_nogil_requirements.txt +kiwisolver==1.4.4 + # via matplotlib +matplotlib==3.6.2 + # via -r /scikit-learn/build_tools/azure/python_nogil_requirements.txt +meson==1.4.0 + # via meson-python +meson-python==0.16.0 + # via -r /scikit-learn/build_tools/azure/python_nogil_requirements.txt +ninja==1.11.1.1 + # via -r /scikit-learn/build_tools/azure/python_nogil_requirements.txt +numpy==1.24.0 + # via + # -r /scikit-learn/build_tools/azure/python_nogil_requirements.txt + # contourpy + # matplotlib + # scipy +packaging==24.0 + # via + # matplotlib + # meson-python + # pyproject-metadata + # pytest +pillow==9.5.0 + # via matplotlib +pluggy==1.5.0 + # via pytest +pyparsing==3.1.2 + # via matplotlib +pyproject-metadata==0.8.0 + # via meson-python +pytest==7.4.4 + # via + # -r /scikit-learn/build_tools/azure/python_nogil_requirements.txt + # pytest-xdist +pytest-xdist==3.6.1 + # via -r /scikit-learn/build_tools/azure/python_nogil_requirements.txt +python-dateutil==2.9.0.post0 + # via matplotlib +scipy==1.9.3 + # via -r /scikit-learn/build_tools/azure/python_nogil_requirements.txt +six==1.16.0 + # via python-dateutil +threadpoolctl==3.5.0 + # via -r /scikit-learn/build_tools/azure/python_nogil_requirements.txt +tomli==2.0.1 + # via + # meson-python + # pytest diff --git a/build_tools/azure/python_nogil_requirements.txt b/build_tools/azure/python_nogil_requirements.txt new file mode 100644 index 0000000000000..2cebad9a03b25 --- /dev/null +++ b/build_tools/azure/python_nogil_requirements.txt @@ -0,0 +1,20 @@ +# To generate python_nogil_lock.txt, use the following command: +# docker run -v $PWD:/scikit-learn -it nogil/python bash -c 'pip install pip-tools; pip-compile --upgrade /scikit-learn/build_tools/azure/python_nogil_requirements.txt -o /scikit-learn/build_tools/azure/python_nogil_lock.txt' +# +# The reason behind it is that you need python-nogil to generate the pip lock +# file. Using pip-compile --index and --extra-index will not work, for example +# the latest cython will be picked up from PyPI, rather than the one from the +# python-nogil index +matplotlib +numpy +scipy +cython +joblib +threadpoolctl +# TODO: somehow pytest 8 does not seem to work with meson editable +# install. Exit code is 5, i.e. no test collected +# This would be fixed by https://github.com/mesonbuild/meson-python/pull/569 +pytest<8 +pytest-xdist +meson-python +ninja diff --git a/build_tools/azure/test_docs.sh b/build_tools/azure/test_docs.sh index b3a5ec97c4d6a..61e855425786b 100755 --- a/build_tools/azure/test_docs.sh +++ b/build_tools/azure/test_docs.sh @@ -4,7 +4,7 @@ set -e if [[ "$DISTRIB" =~ ^conda.* ]]; then source activate $VIRTUALENV -elif [[ "$DISTRIB" == "ubuntu" ]]; then +elif [[ "$DISTRIB" == "ubuntu" || "$DISTRIB" == "pip-nogil" ]]; then source $VIRTUALENV/bin/activate fi diff --git a/build_tools/shared.sh b/build_tools/shared.sh index dd4b0856050a7..4866c149d506f 100644 --- a/build_tools/shared.sh +++ b/build_tools/shared.sh @@ -29,7 +29,7 @@ show_installed_libraries(){ activate_environment() { if [[ "$DISTRIB" =~ ^conda.* ]]; then source activate $VIRTUALENV - elif [[ "$DISTRIB" == "ubuntu" || "$DISTRIB" == "debian-32" ]]; then + elif [[ "$DISTRIB" == "ubuntu" || "$DISTRIB" == "debian-32" || "$DISTRIB" == "pip-nogil" ]]; then source $VIRTUALENV/bin/activate fi } diff --git a/doc/developers/contributing.rst b/doc/developers/contributing.rst index f46051175b82d..8c8d478e6d6f5 100644 --- a/doc/developers/contributing.rst +++ b/doc/developers/contributing.rst @@ -518,6 +518,7 @@ Commit Message Marker Action Taken by CI [cd build cirrus] CD is run only for Cirrus CI [lint skip] Azure pipeline skips linting [scipy-dev] Build & test with our dependencies (numpy, scipy, etc.) development builds +[nogil] Build & test with the nogil experimental branches of CPython, Cython, NumPy, SciPy, ... [pyodide] Build & test with Pyodide [azure parallel] Run Azure CI jobs in parallel [cirrus arm] Run Cirrus CI ARM test From c979671fedc6c7a9fc9943700005b1a619b56761 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Wed, 5 Jun 2024 11:32:14 +0200 Subject: [PATCH 03/13] [free-threaded] First attempt to see whether at least the trigger works --- azure-pipelines.yml | 37 ++++++++++++++---------------------- build_tools/azure/install.sh | 22 ++++++++++++++++----- 2 files changed, 31 insertions(+), 28 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 1ce5244124d4d..7787f0ae1ce64 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -62,40 +62,31 @@ jobs: SKLEARN_WARNINGS_AS_ERRORS: '1' CHECK_PYTEST_SOFT_DEPENDENCY: 'true' -- template: build_tools/azure/posix-docker.yml - # Experimental CPython branch without the Global Interpreter Lock: - # https://github.com/colesbury/nogil/ - # - # The nogil build relies on a dedicated PyPI-style index to install patched - # versions of NumPy, SciPy and Cython maintained by @colesbury and that - # include specific fixes to make them run correctly without relying on the GIL. - # - # The goal of this CI entry is to make sure that we do not introduce any - # dependency on the GIL in scikit-learn itself. An auxiliary goal is to early - # detect any regression in the patched build dependencies to report them - # upstream. The long-term goal is to be able to stop having to maintain - # multiprocessing based workaround / hacks in joblib / loky to make multi-CPU - # computing in scikit-learn efficient by default using regular threads. - # - # If this experimental entry becomes too unstable, feel free to disable it. +- template: build_tools/azure/posix.yml + # CPython 3.13 free-threaded build. Currently this uses CPyton 3.13 + # free-threaded build from deadsnakes PPA together with Numpy and Scipy + # free-threaded development wheels. + # TODO Use released Numpy and Scipy versions when they are available + # TODO Use CPython 3.13 when it is released (planned in October 2024) parameters: - name: Linux_nogil - vmImage: ubuntu-20.04 + name: Linux_free_threaded + vmImage: ubuntu-22.04 dependsOn: [git_commit, linting] condition: | and( succeeded(), not(contains(dependencies['git_commit']['outputs']['commit.message'], '[ci skip]')), or(eq(variables['Build.Reason'], 'Schedule'), - contains(dependencies['git_commit']['outputs']['commit.message'], '[nogil]' + contains(dependencies['git_commit']['outputs']['commit.message'], '[free-threaded]' ) ) ) matrix: - pylatest_pip_nogil: - DOCKER_CONTAINER: 'nogil/python' - DISTRIB: 'pip-nogil' - LOCK_FILE: './build_tools/azure/python_nogil_lock.txt' + pylatest_pip_free_threaded: + DOCKER_CONTAINER: '' + DISTRIB: 'pip-free-threaded' + # TODO free-threaded probably use pip lock-file + LOCK_FILE: './build_tools/azure/python_free_threaded_lock.txt' COVERAGE: 'false' - job: Linux_Nightly_Pyodide diff --git a/build_tools/azure/install.sh b/build_tools/azure/install.sh index cdaaa0c8cc965..02eb73b9ca38a 100755 --- a/build_tools/azure/install.sh +++ b/build_tools/azure/install.sh @@ -66,10 +66,19 @@ python_environment_install_and_activate() { source $VIRTUALENV/bin/activate pip install -r "${LOCK_FILE}" - elif [[ "$DISTRIB" == "pip-nogil" ]]; then - python -m venv $VIRTUALENV + elif [[ "$DISTRIB" == "pip-free-threaded" ]]; then + python3.13t -m venv $VIRTUALENV source $VIRTUALENV/bin/activate - pip install -r "${LOCK_FILE}" + # TODO free-threaded use a lock-file, for now done by hand + # TODO for now need pip 24.1b1 to find free-threaded wheels + pip install -U --pre pip + dev_anaconda_url=https://pypi.anaconda.org/scientific-python-nightly-wheels/simple + dev_packages="numpy scipy" + pip install --pre --upgrade --timeout=60 --extra-index $dev_anaconda_url $dev_packages + # TODO need development Cython for now + pip install git+https://github.com/cython/cython + # Install all the other dependencies + pip install joblib threadpoolctl pytest meson-python fi if [[ "$DISTRIB" == "conda-pip-scipy-dev" ]]; then @@ -87,10 +96,13 @@ python_environment_install_and_activate() { echo "Installing pillow from latest sources" pip install https://github.com/python-pillow/Pillow/archive/main.zip - elif [[ "$DISTRIB" == "pip-nogil" ]]; then + elif [[ "$DISTRIB" == "pip-free-threaded" ]]; then apt-get -yq update apt-get install -yq ccache - + apt-get install software-properties-common -y + add-apt-repository --yes ppa:deadsnakes/nightly + apt-get update -y + apt-get install -y --no-install-recommends python3.13-dev python3.13-venv python3.13-nogil fi } From 84b62b8caef1329e2b0c90cfe8ac695f6fd2c029 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Wed, 5 Jun 2024 11:37:48 +0200 Subject: [PATCH 04/13] [free-threaded] fix --- build_tools/azure/install.sh | 17 +++++++++-------- doc/developers/contributing.rst | 2 +- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/build_tools/azure/install.sh b/build_tools/azure/install.sh index 02eb73b9ca38a..e36f1f0718b27 100755 --- a/build_tools/azure/install.sh +++ b/build_tools/azure/install.sh @@ -38,6 +38,15 @@ pre_python_environment_install() { apt-get install -y python3-dev python3-numpy python3-scipy \ python3-matplotlib libatlas3-base libatlas-base-dev \ python3-virtualenv python3-pandas ccache git + + elif [[ "$DISTRIB" == "pip-free-threaded" ]]; then + apt-get -yq update + apt-get install -yq ccache + apt-get install software-properties-common -y + add-apt-repository --yes ppa:deadsnakes/nightly + apt-get update -y + apt-get install -y --no-install-recommends python3.13-dev python3.13-venv python3.13-nogil + fi } @@ -95,14 +104,6 @@ python_environment_install_and_activate() { pip install https://github.com/joblib/joblib/archive/master.zip echo "Installing pillow from latest sources" pip install https://github.com/python-pillow/Pillow/archive/main.zip - - elif [[ "$DISTRIB" == "pip-free-threaded" ]]; then - apt-get -yq update - apt-get install -yq ccache - apt-get install software-properties-common -y - add-apt-repository --yes ppa:deadsnakes/nightly - apt-get update -y - apt-get install -y --no-install-recommends python3.13-dev python3.13-venv python3.13-nogil fi } diff --git a/doc/developers/contributing.rst b/doc/developers/contributing.rst index 8c8d478e6d6f5..535983712cc8c 100644 --- a/doc/developers/contributing.rst +++ b/doc/developers/contributing.rst @@ -518,7 +518,7 @@ Commit Message Marker Action Taken by CI [cd build cirrus] CD is run only for Cirrus CI [lint skip] Azure pipeline skips linting [scipy-dev] Build & test with our dependencies (numpy, scipy, etc.) development builds -[nogil] Build & test with the nogil experimental branches of CPython, Cython, NumPy, SciPy, ... +[free-threaded] Build & test with CPython 3.13 free-threaded [pyodide] Build & test with Pyodide [azure parallel] Run Azure CI jobs in parallel [cirrus arm] Run Cirrus CI ARM test From 72c2e1c9fa4a4189fd70a4d198500e7afba1ad81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Wed, 5 Jun 2024 11:46:48 +0200 Subject: [PATCH 05/13] [free-threaded] fix --- build_tools/azure/install.sh | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/build_tools/azure/install.sh b/build_tools/azure/install.sh index e36f1f0718b27..65d5918c54733 100755 --- a/build_tools/azure/install.sh +++ b/build_tools/azure/install.sh @@ -40,13 +40,12 @@ pre_python_environment_install() { python3-virtualenv python3-pandas ccache git elif [[ "$DISTRIB" == "pip-free-threaded" ]]; then - apt-get -yq update - apt-get install -yq ccache - apt-get install software-properties-common -y - add-apt-repository --yes ppa:deadsnakes/nightly - apt-get update -y - apt-get install -y --no-install-recommends python3.13-dev python3.13-venv python3.13-nogil - + sudo apt-get -yq update + sudo apt-get install -yq ccache + sudo apt-get install software-properties-common -y + sudo add-apt-repository --yes ppa:deadsnakes/nightly + sudo apt-get update -y + sudo apt-get install -y --no-install-recommends python3.13-dev python3.13-venv python3.13-nogil fi } From 3da8db478b75c31eb4df551a319ef19a4a2dfd8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Wed, 5 Jun 2024 11:58:31 +0200 Subject: [PATCH 06/13] [free-threaded] fix --- azure-pipelines.yml | 4 +++- build_tools/azure/install.sh | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 7787f0ae1ce64..b1eb59e62e1f0 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -71,7 +71,9 @@ jobs: parameters: name: Linux_free_threaded vmImage: ubuntu-22.04 - dependsOn: [git_commit, linting] + # TODO free-threading temporary optimization for quicker iteration + dependsOn: [git_commit] + # dependsOn: [git_commit, linting] condition: | and( succeeded(), diff --git a/build_tools/azure/install.sh b/build_tools/azure/install.sh index 65d5918c54733..bc3446785775d 100755 --- a/build_tools/azure/install.sh +++ b/build_tools/azure/install.sh @@ -45,7 +45,7 @@ pre_python_environment_install() { sudo apt-get install software-properties-common -y sudo add-apt-repository --yes ppa:deadsnakes/nightly sudo apt-get update -y - sudo apt-get install -y --no-install-recommends python3.13-dev python3.13-venv python3.13-nogil + sudo apt-get install -y --no-install-recommends python3.13-dev python3.13-venv python3.13-nogil meson ninja-build fi } From b9255e98f618820be191fd66bd1762fcfd3179da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Wed, 5 Jun 2024 12:57:18 +0200 Subject: [PATCH 07/13] [free-threaded] fix --- build_tools/azure/test_docs.sh | 2 +- build_tools/shared.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build_tools/azure/test_docs.sh b/build_tools/azure/test_docs.sh index 61e855425786b..1258ecf69f080 100755 --- a/build_tools/azure/test_docs.sh +++ b/build_tools/azure/test_docs.sh @@ -4,7 +4,7 @@ set -e if [[ "$DISTRIB" =~ ^conda.* ]]; then source activate $VIRTUALENV -elif [[ "$DISTRIB" == "ubuntu" || "$DISTRIB" == "pip-nogil" ]]; then +elif [[ "$DISTRIB" == "ubuntu" || "$DISTRIB" == "pip-free-threaded" ]]; then source $VIRTUALENV/bin/activate fi diff --git a/build_tools/shared.sh b/build_tools/shared.sh index 4866c149d506f..958c6ca1408e7 100644 --- a/build_tools/shared.sh +++ b/build_tools/shared.sh @@ -29,7 +29,7 @@ show_installed_libraries(){ activate_environment() { if [[ "$DISTRIB" =~ ^conda.* ]]; then source activate $VIRTUALENV - elif [[ "$DISTRIB" == "ubuntu" || "$DISTRIB" == "debian-32" || "$DISTRIB" == "pip-nogil" ]]; then + elif [[ "$DISTRIB" == "ubuntu" || "$DISTRIB" == "debian-32" || "$DISTRIB" == "pip-free-threaded" ]]; then source $VIRTUALENV/bin/activate fi } From 82083cc152ab1561740b0e2ad0e9596de20ce358 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Wed, 5 Jun 2024 13:38:01 +0200 Subject: [PATCH 08/13] [free-threaded] fix --- azure-pipelines.yml | 2 +- build_tools/azure/install.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index b1eb59e62e1f0..71fcd2fba67c4 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -85,7 +85,7 @@ jobs: ) matrix: pylatest_pip_free_threaded: - DOCKER_CONTAINER: '' + PYTHON_GIL: '0' DISTRIB: 'pip-free-threaded' # TODO free-threaded probably use pip lock-file LOCK_FILE: './build_tools/azure/python_free_threaded_lock.txt' diff --git a/build_tools/azure/install.sh b/build_tools/azure/install.sh index bc3446785775d..34895997f0a17 100755 --- a/build_tools/azure/install.sh +++ b/build_tools/azure/install.sh @@ -86,7 +86,7 @@ python_environment_install_and_activate() { # TODO need development Cython for now pip install git+https://github.com/cython/cython # Install all the other dependencies - pip install joblib threadpoolctl pytest meson-python + pip install joblib threadpoolctl pytest meson-python pytest-xdist fi if [[ "$DISTRIB" == "conda-pip-scipy-dev" ]]; then From 942db7811456d7634cf623794113d06ae270d8b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Wed, 5 Jun 2024 14:00:33 +0200 Subject: [PATCH 09/13] [free-threaded] apparently setuptools is needed for part of the tests ... --- build_tools/azure/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build_tools/azure/install.sh b/build_tools/azure/install.sh index 34895997f0a17..4b528bbf6a700 100755 --- a/build_tools/azure/install.sh +++ b/build_tools/azure/install.sh @@ -86,7 +86,7 @@ python_environment_install_and_activate() { # TODO need development Cython for now pip install git+https://github.com/cython/cython # Install all the other dependencies - pip install joblib threadpoolctl pytest meson-python pytest-xdist + pip install joblib threadpoolctl pytest meson-python pytest-xdist setuptools fi if [[ "$DISTRIB" == "conda-pip-scipy-dev" ]]; then From 83e7f181bc7bf06509d5182467ffeb21e298616a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Wed, 5 Jun 2024 17:04:33 +0200 Subject: [PATCH 10/13] [free-threaded] Try to use lock file --- azure-pipelines.yml | 3 +- .../azure/cpython_free_threaded_lock.txt | 39 ++++++++++ .../cpython_free_threaded_requirements.txt | 16 ++++ build_tools/azure/python_nogil_lock.txt | 73 ------------------- .../azure/python_nogil_requirements.txt | 20 ----- 5 files changed, 56 insertions(+), 95 deletions(-) create mode 100644 build_tools/azure/cpython_free_threaded_lock.txt create mode 100644 build_tools/azure/cpython_free_threaded_requirements.txt delete mode 100644 build_tools/azure/python_nogil_lock.txt delete mode 100644 build_tools/azure/python_nogil_requirements.txt diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 71fcd2fba67c4..c2133ea441958 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -87,8 +87,7 @@ jobs: pylatest_pip_free_threaded: PYTHON_GIL: '0' DISTRIB: 'pip-free-threaded' - # TODO free-threaded probably use pip lock-file - LOCK_FILE: './build_tools/azure/python_free_threaded_lock.txt' + LOCK_FILE: './build_tools/azure/cpython_free_threaded_lock.txt' COVERAGE: 'false' - job: Linux_Nightly_Pyodide diff --git a/build_tools/azure/cpython_free_threaded_lock.txt b/build_tools/azure/cpython_free_threaded_lock.txt new file mode 100644 index 0000000000000..f1c58b65a59d6 --- /dev/null +++ b/build_tools/azure/cpython_free_threaded_lock.txt @@ -0,0 +1,39 @@ +# +# This file is autogenerated by pip-compile with Python 3.13 +# by the following command: +# +# pip-compile --allow-unsafe --output-file=/scikit-learn/build_tools/azure/cpython_free_threaded_lock.txt /scikit-learn/build_tools/azure/cpython_free_threaded_requirements.txt +# +execnet==2.1.1 + # via pytest-xdist +iniconfig==2.0.0 + # via pytest +joblib==1.4.2 + # via -r /scikit-learn/build_tools/azure/cpython_free_threaded_requirements.txt +meson==1.4.1 + # via meson-python +meson-python==0.16.0 + # via -r /scikit-learn/build_tools/azure/cpython_free_threaded_requirements.txt +ninja==1.11.1.1 + # via -r /scikit-learn/build_tools/azure/cpython_free_threaded_requirements.txt +packaging==24.0 + # via + # meson-python + # pyproject-metadata + # pytest +pluggy==1.5.0 + # via pytest +pyproject-metadata==0.8.0 + # via meson-python +pytest==8.2.2 + # via + # -r /scikit-learn/build_tools/azure/cpython_free_threaded_requirements.txt + # pytest-xdist +pytest-xdist==3.6.1 + # via -r /scikit-learn/build_tools/azure/cpython_free_threaded_requirements.txt +threadpoolctl==3.5.0 + # via -r /scikit-learn/build_tools/azure/cpython_free_threaded_requirements.txt + +# The following packages are considered to be unsafe in a requirements file: +setuptools==70.0.0 + # via -r /scikit-learn/build_tools/azure/cpython_free_threaded_requirements.txt diff --git a/build_tools/azure/cpython_free_threaded_requirements.txt b/build_tools/azure/cpython_free_threaded_requirements.txt new file mode 100644 index 0000000000000..5561e6c28ca5e --- /dev/null +++ b/build_tools/azure/cpython_free_threaded_requirements.txt @@ -0,0 +1,16 @@ +# To generate cpython_free_threaded_lock.txt, use the following command: +# docker run -v $PWD:/scikit-learn -it ubuntu bash -c 'export DEBIAN_FRONTEND=noninteractive; apt-get -yq update; apt-get install software-properties-common ccache -y; add-apt-repository --yes ppa:deadsnakes/nightly; apt-get update -y; apt-get install -y --no-install-recommends python3.13-dev python3.13-venv python3.13-nogil; python3.13t -m venv /venvs/myenv; source /venvs/myenv/bin/activate; pip install pip-tools; pip-compile --allow-unsafe /scikit-learn/build_tools/azure/cpython_free_threaded_requirements.txt -o /scikit-learn/build_tools/azure/cpython_free_threaded_lock.txt' + +# The reason behind it is that you need python-3.13t to generate the pip lock +# file. For pure Python wheel this does not really matter. But when there are +# cython, numpy and scipy releases that have a CPython 3.13 free-threaded +# wheel, we can add them here and this is important that the Python 3.13 +# free-threaded wheel is picked up in the lock-file +joblib +threadpoolctl +pytest +pytest-xdist +ninja +meson-python +# For some reason some of our tests require setuptools +setuptools diff --git a/build_tools/azure/python_nogil_lock.txt b/build_tools/azure/python_nogil_lock.txt deleted file mode 100644 index 7f67a48842dea..0000000000000 --- a/build_tools/azure/python_nogil_lock.txt +++ /dev/null @@ -1,73 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --output-file=/scikit-learn/build_tools/azure/python_nogil_lock.txt /scikit-learn/build_tools/azure/python_nogil_requirements.txt -# ---index-url https://d1yxz45j0ypngg.cloudfront.net/ ---extra-index-url https://pypi.org/simple - -contourpy==1.1.1 - # via matplotlib -cycler==0.12.1 - # via matplotlib -cython==3.0.10 - # via -r /scikit-learn/build_tools/azure/python_nogil_requirements.txt -exceptiongroup==1.2.1 - # via pytest -execnet==2.1.1 - # via pytest-xdist -fonttools==4.51.0 - # via matplotlib -iniconfig==2.0.0 - # via pytest -joblib==1.4.2 - # via -r /scikit-learn/build_tools/azure/python_nogil_requirements.txt -kiwisolver==1.4.4 - # via matplotlib -matplotlib==3.6.2 - # via -r /scikit-learn/build_tools/azure/python_nogil_requirements.txt -meson==1.4.0 - # via meson-python -meson-python==0.16.0 - # via -r /scikit-learn/build_tools/azure/python_nogil_requirements.txt -ninja==1.11.1.1 - # via -r /scikit-learn/build_tools/azure/python_nogil_requirements.txt -numpy==1.24.0 - # via - # -r /scikit-learn/build_tools/azure/python_nogil_requirements.txt - # contourpy - # matplotlib - # scipy -packaging==24.0 - # via - # matplotlib - # meson-python - # pyproject-metadata - # pytest -pillow==9.5.0 - # via matplotlib -pluggy==1.5.0 - # via pytest -pyparsing==3.1.2 - # via matplotlib -pyproject-metadata==0.8.0 - # via meson-python -pytest==7.4.4 - # via - # -r /scikit-learn/build_tools/azure/python_nogil_requirements.txt - # pytest-xdist -pytest-xdist==3.6.1 - # via -r /scikit-learn/build_tools/azure/python_nogil_requirements.txt -python-dateutil==2.9.0.post0 - # via matplotlib -scipy==1.9.3 - # via -r /scikit-learn/build_tools/azure/python_nogil_requirements.txt -six==1.16.0 - # via python-dateutil -threadpoolctl==3.5.0 - # via -r /scikit-learn/build_tools/azure/python_nogil_requirements.txt -tomli==2.0.1 - # via - # meson-python - # pytest diff --git a/build_tools/azure/python_nogil_requirements.txt b/build_tools/azure/python_nogil_requirements.txt deleted file mode 100644 index 2cebad9a03b25..0000000000000 --- a/build_tools/azure/python_nogil_requirements.txt +++ /dev/null @@ -1,20 +0,0 @@ -# To generate python_nogil_lock.txt, use the following command: -# docker run -v $PWD:/scikit-learn -it nogil/python bash -c 'pip install pip-tools; pip-compile --upgrade /scikit-learn/build_tools/azure/python_nogil_requirements.txt -o /scikit-learn/build_tools/azure/python_nogil_lock.txt' -# -# The reason behind it is that you need python-nogil to generate the pip lock -# file. Using pip-compile --index and --extra-index will not work, for example -# the latest cython will be picked up from PyPI, rather than the one from the -# python-nogil index -matplotlib -numpy -scipy -cython -joblib -threadpoolctl -# TODO: somehow pytest 8 does not seem to work with meson editable -# install. Exit code is 5, i.e. no test collected -# This would be fixed by https://github.com/mesonbuild/meson-python/pull/569 -pytest<8 -pytest-xdist -meson-python -ninja From caeff2a011d644bd57111e043b67c2a5059d4dc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Wed, 5 Jun 2024 17:16:06 +0200 Subject: [PATCH 11/13] [free-threaded] Actually try to use lock file --- build_tools/azure/install.sh | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/build_tools/azure/install.sh b/build_tools/azure/install.sh index 4b528bbf6a700..2cda0f6948571 100755 --- a/build_tools/azure/install.sh +++ b/build_tools/azure/install.sh @@ -45,7 +45,7 @@ pre_python_environment_install() { sudo apt-get install software-properties-common -y sudo add-apt-repository --yes ppa:deadsnakes/nightly sudo apt-get update -y - sudo apt-get install -y --no-install-recommends python3.13-dev python3.13-venv python3.13-nogil meson ninja-build + sudo apt-get install -y --no-install-recommends python3.13-dev python3.13-venv python3.13-nogil fi } @@ -77,16 +77,22 @@ python_environment_install_and_activate() { elif [[ "$DISTRIB" == "pip-free-threaded" ]]; then python3.13t -m venv $VIRTUALENV source $VIRTUALENV/bin/activate - # TODO free-threaded use a lock-file, for now done by hand + pip install -r "${LOCK_FILE}" # TODO for now need pip 24.1b1 to find free-threaded wheels pip install -U --pre pip + # TODO When there are CPython 3.13 free-threaded wheels for numpy and + # scipy move this to + # build_tools/azure/cpython_free_threaded_requirements.txt. For now we + # install them from scientific-python-nightly-wheels dev_anaconda_url=https://pypi.anaconda.org/scientific-python-nightly-wheels/simple dev_packages="numpy scipy" pip install --pre --upgrade --timeout=60 --extra-index $dev_anaconda_url $dev_packages - # TODO need development Cython for now + # TODO Move cython to + # build_tools/azure/cpython_free_threaded_requirements.txt where there + # is a CPython 3.13 free-threaded wheel + # For now, we need the development version of Cython which has CPython + # 3.13 free-threaded fixes so we install it from source pip install git+https://github.com/cython/cython - # Install all the other dependencies - pip install joblib threadpoolctl pytest meson-python pytest-xdist setuptools fi if [[ "$DISTRIB" == "conda-pip-scipy-dev" ]]; then From 52e6cb5b4190f00e7e5901083da8a04da5f60d28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Wed, 5 Jun 2024 17:33:58 +0200 Subject: [PATCH 12/13] [free-threaded] Tweaks --- azure-pipelines.yml | 10 ++-------- build_tools/azure/install.sh | 11 +++++++---- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index c2133ea441958..b65d17faafc66 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -63,17 +63,11 @@ jobs: CHECK_PYTEST_SOFT_DEPENDENCY: 'true' - template: build_tools/azure/posix.yml - # CPython 3.13 free-threaded build. Currently this uses CPyton 3.13 - # free-threaded build from deadsnakes PPA together with Numpy and Scipy - # free-threaded development wheels. - # TODO Use released Numpy and Scipy versions when they are available - # TODO Use CPython 3.13 when it is released (planned in October 2024) + # CPython 3.13 free-threaded build parameters: name: Linux_free_threaded vmImage: ubuntu-22.04 - # TODO free-threading temporary optimization for quicker iteration - dependsOn: [git_commit] - # dependsOn: [git_commit, linting] + dependsOn: [git_commit, linting] condition: | and( succeeded(), diff --git a/build_tools/azure/install.sh b/build_tools/azure/install.sh index 2cda0f6948571..c67446dfc2d24 100755 --- a/build_tools/azure/install.sh +++ b/build_tools/azure/install.sh @@ -39,13 +39,16 @@ pre_python_environment_install() { python3-matplotlib libatlas3-base libatlas-base-dev \ python3-virtualenv python3-pandas ccache git + # TODO for now we use CPython 3.13 from Ubuntu deadsnakes PPA. When CPython + # 3.13 is released (scheduled October 2024) we can use something more + # similar to other conda+pip based builds elif [[ "$DISTRIB" == "pip-free-threaded" ]]; then sudo apt-get -yq update sudo apt-get install -yq ccache - sudo apt-get install software-properties-common -y + sudo apt-get install -yq software-properties-common sudo add-apt-repository --yes ppa:deadsnakes/nightly - sudo apt-get update -y - sudo apt-get install -y --no-install-recommends python3.13-dev python3.13-venv python3.13-nogil + sudo apt-get update -yq + sudo apt-get install -yq --no-install-recommends python3.13-dev python3.13-venv python3.13-nogil fi } @@ -88,7 +91,7 @@ python_environment_install_and_activate() { dev_packages="numpy scipy" pip install --pre --upgrade --timeout=60 --extra-index $dev_anaconda_url $dev_packages # TODO Move cython to - # build_tools/azure/cpython_free_threaded_requirements.txt where there + # build_tools/azure/cpython_free_threaded_requirements.txt when there # is a CPython 3.13 free-threaded wheel # For now, we need the development version of Cython which has CPython # 3.13 free-threaded fixes so we install it from source From a8a84e076c1be3b7434a1586e25c1d4c08471399 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Mon, 10 Jun 2024 09:05:29 +0200 Subject: [PATCH 13/13] Update build_tools/azure/cpython_free_threaded_requirements.txt Co-authored-by: Olivier Grisel --- build_tools/azure/cpython_free_threaded_requirements.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build_tools/azure/cpython_free_threaded_requirements.txt b/build_tools/azure/cpython_free_threaded_requirements.txt index 5561e6c28ca5e..b48f69abbc283 100644 --- a/build_tools/azure/cpython_free_threaded_requirements.txt +++ b/build_tools/azure/cpython_free_threaded_requirements.txt @@ -12,5 +12,6 @@ pytest pytest-xdist ninja meson-python -# For some reason some of our tests require setuptools +# For some reason some of our tests require setuptools. +# TODO: update those tests to remove the dependency. setuptools