diff --git a/.github/workflows/test_package.yml b/.github/workflows/test_package.yml index 96c6da0..af33fbd 100644 --- a/.github/workflows/test_package.yml +++ b/.github/workflows/test_package.yml @@ -7,38 +7,27 @@ jobs: fail-fast: false matrix: os: [windows-latest, ubuntu-latest, macos-latest] - embedded-py: [3.11.5, 3.12.4] - conan: - - version: 1 - args: lumicks/testing --build=missing - - version: 2 - args: --user=lumicks --channel=testing --build=missing - name: "${{ matrix.os }}, ${{ matrix.embedded-py }}, v${{ matrix.conan.version }}" + embedded-py: [3.11.5, 3.12.10, 3.13.5] + name: "${{ matrix.os }}, ${{ matrix.embedded-py }}" env: - create_pck: conan create . ${{ matrix.conan.args }} -o embedded_python-core/*:version=${{ matrix.embedded-py }} + create_pck: conan create . -o embedded_python-core/*:version=${{ matrix.embedded-py }} --build=missing --user=lumicks --channel=testing steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: - python-version: "3.11" + python-version: "3.12" - if: runner.os == 'macOS' name: Set up CC/CXX env run: | echo CC=/usr/bin/clang >> $GITHUB_ENV echo CXX=/usr/bin/clang++ >> $GITHUB_ENV - - if: matrix.conan.version == '1' - name: Install Conan v1 - run: | - python -m pip install conan==1.64.1 - conan profile new default --detect - - if: matrix.conan.version == '2' - name: Install Conan v2 + - name: Install Conan run: | - python -m pip install conan==2.4.1 + python -m pip install conan==2.18.1 conan profile detect - name: Test core - run: conan create ./core ${{ matrix.conan.args }} -o embedded_python-core/*:version=${{ matrix.embedded-py }} + run: cd core && ${{ env.create_pck }} - name: Test baseline run: ${{ env.create_pck }} - name: Test with numpy env diff --git a/changelog.md b/changelog.md index 672bea0..cf87aac 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,12 @@ # Changelog +## v1.10.0 | 2025-07-23 + +- Added support for Python 3.13. +- Switched from `pip-licenses` to `pip-licenses-cli` since the former doesn't seem to be maintained anymore and is falling behind on compatibility. See https://github.com/raimon49/pip-licenses/issues/227. The matching `pip_licenses_version` option has been renamed to `pip_licenses_cli_version`. +- Updated default recipe options to `pip` v25.1.1, `setuptools` v80.9.0, and `wheel` v0.45.1. +- Dropped support for Conan v1. + ## v1.9.1 | 2024-06-17 - Fixed an issue where calling CMake with `-DPython_EXECUTABLE=` created conflicts with the embedded Python (either a loud version error, or silently passing the wrong library paths). Some IDEs would pass this flag implicitly and it would hijack the `find_package(Python)` call used internally by this recipe. Now, we specifically protect against this since there should be no traces of system Python in a project that wishes to embed it. diff --git a/conanfile.py b/conanfile.py index f379d89..ac571b2 100644 --- a/conanfile.py +++ b/conanfile.py @@ -4,13 +4,13 @@ from conan import ConanFile from conan.tools import files, scm -required_conan_version = ">=1.59.0" +required_conan_version = ">=2.5.0" # noinspection PyUnresolvedReferences class EmbeddedPython(ConanFile): name = "embedded_python" - version = "1.9.1" # of the Conan package, `embedded_python-core:version` is the Python version + version = "1.10.0" # of the Conan package, `embedded_python-core:version` is the Python version license = "PSFL" description = "Embedded distribution of Python" topics = "embedded", "python" @@ -20,22 +20,21 @@ class EmbeddedPython(ConanFile): options = { "packages": [None, "ANY"], "pip_version": ["ANY"], - "pip_licenses_version": ["ANY"], + "pip_licenses_cli_version": ["ANY"], "setuptools_version": ["ANY"], "wheel_version": ["ANY"], } default_options = { "packages": None, - "pip_version": "24.0", - "pip_licenses_version": "4.4.0", - "setuptools_version": "69.5.1", - "wheel_version": "0.43.0", + "pip_version": "25.1.1", + "pip_licenses_cli_version": "1.4.0", + "setuptools_version": "80.9.0", + "wheel_version": "0.45.1", } - short_paths = True # some of the pip packages go over the 260 char path limit on Windows exports_sources = "embedded_python.cmake" def requirements(self): - self.requires(f"embedded_python-core/1.3.1@{self.user}/{self.channel}") + self.requires(f"embedded_python-core/1.4.0@{self.user}/{self.channel}") @property def pyversion(self): @@ -140,7 +139,7 @@ def _build_bootstrap(self): f"pip=={self.options.pip_version}", f"setuptools=={self.options.setuptools_version}", f"wheel=={self.options.wheel_version}", - f"pip-licenses=={self.options.pip_licenses_version}", + f"pip-licenses-cli=={self.options.pip_licenses_cli_version}", ] options = "--no-warn-script-location --upgrade" self._run_bootstrap_py(f"-m pip install {options} {' '.join(specs)}") @@ -202,9 +201,7 @@ def package(self): self._gather_packages(license_folder) def package_info(self): - self.env_info.PYTHONPATH.append(self.package_folder) self.cpp_info.set_property("cmake_build_modules", ["embedded_python.cmake"]) - self.cpp_info.build_modules = ["embedded_python.cmake"] self.cpp_info.includedirs = [] self.cpp_info.bindirs = [] self.cpp_info.libdirs = [] diff --git a/core/conanfile.py b/core/conanfile.py index 647436a..b338f32 100644 --- a/core/conanfile.py +++ b/core/conanfile.py @@ -7,13 +7,13 @@ from conan.errors import ConanInvalidConfiguration from conan.tools import files, scm -required_conan_version = ">=1.59.0" +required_conan_version = ">=2.5" # noinspection PyUnresolvedReferences class EmbeddedPythonCore(ConanFile): name = "embedded_python-core" - version = "1.3.1" # of the Conan package, `options.version` is the Python version + version = "1.4.0" # of the Conan package, `options.version` is the Python version license = "PSFL" description = "The core embedded Python (no extra pip packages)" topics = "embedded", "python" @@ -27,7 +27,7 @@ class EmbeddedPythonCore(ConanFile): default_options = { "zip_stdlib": "stored", } - exports_sources = "embedded_python_tools.py", "embedded_python*.cmake" + exports_sources = "embedded_python*.cmake" package_type = "shared-library" def validate(self): @@ -52,13 +52,13 @@ def requirements(self): if self.settings.os == "Windows": return # on Windows, we download a binary, so we don't need anything else - self.requires("sqlite3/3.45.3") + self.requires("sqlite3/3.49.1") self.requires("bzip2/1.0.8") self.requires("xz_utils/5.4.5") self.requires("zlib/[>=1.2.11 <2]") self.requires("openssl/[>=3 <4]") if self.settings.os == "Linux": - self.requires("libffi/3.4.4") + self.requires("libffi/3.4.8") self.requires("libuuid/1.0.3") self.requires("mpdecimal/2.5.1") @@ -279,7 +279,6 @@ def package(self): src = self.build_folder dst = pathlib.Path(self.package_folder, "embedded_python") files.copy(self, "embedded_python*.cmake", src, dst=self.package_folder) - files.copy(self, "embedded_python_tools.py", src, dst=self.package_folder) license_folder = pathlib.Path(self.package_folder, "licenses") if self.settings.os == "Windows": @@ -321,11 +320,9 @@ def package(self): self._zip_stdlib(dst) def package_info(self): - self.env_info.PYTHONPATH.append(self.package_folder) self.cpp_info.set_property( "cmake_build_modules", ["embedded_python-core.cmake", "embedded_python-tools.cmake"] ) - self.cpp_info.build_modules = ["embedded_python-core.cmake", "embedded_python-tools.cmake"] prefix = pathlib.Path(self.package_folder) / "embedded_python" self.cpp_info.includedirs = [str(prefix / "include")] if self.settings.os == "Windows": diff --git a/core/embedded_python_tools.py b/core/embedded_python_tools.py deleted file mode 100644 index 574959a..0000000 --- a/core/embedded_python_tools.py +++ /dev/null @@ -1,62 +0,0 @@ -import os -import shutil -import pathlib -from conan.tools import files - - -def _symlink_compat(conanfile, src, dst): - """On Windows, symlinks require admin privileges, so we use a directory junction instead""" - if conanfile.settings.os == "Windows": - import _winapi - - try: - _winapi.CreateJunction(str(src), str(dst)) - except OSError: - files.copy(conanfile, "*", src, dst) - else: - os.symlink(src, dst) - - -def symlink_import(conanfile, dst="bin/python/interpreter", bin="bin"): - """Copying the entire embedded Python environment is extremely slow, so we just symlink it - - Usage: - ```python - def imports(self): - import embedded_python_tools - embedded_python_tools.symlink_import(self, dst="bin/python/interpreter") - ``` - - The symlink points to the Conan package location. We still want to copy in `python*.dll` and - `python*.zip` right next to the executable so that they can be found, but the rest of - the Python environment is in a subfolder: - - bin - |- python/interpreter - | |- Lib - | \- ... - |-
.exe - |- python*.dll - |- python*.zip - \- ... - """ - dst = pathlib.Path(dst).absolute() - if not dst.parent.exists(): - dst.parent.mkdir(parents=True) - - # Clean the `dst` path if it already exists - # Note: we use `os.path.lexists` here specifically to also detect and clean up old broken symlinks - if os.path.lexists(dst): - try: # to remove any existing junction/symlink - os.remove(dst) - except: # this seems to be the only way to find out this is not a junction - shutil.rmtree(dst) - root_folder = pathlib.Path(__file__).resolve().parent - src = root_folder / "embedded_python" - _symlink_compat(conanfile, src, dst) - - bin = pathlib.Path(bin).absolute() - files.copy(conanfile, "python*.dll", src, bin, keep_path=False) - files.copy(conanfile, "libpython*.so*", src / "lib", bin, keep_path=False) - files.copy(conanfile, "libpython*.dylib", src / "lib", bin, keep_path=False) - files.copy(conanfile, "python*.zip", src, bin, keep_path=False) diff --git a/core/test_package/conanfile.py b/core/test_package/conanfile.py index da5ca97..4730ee9 100644 --- a/core/test_package/conanfile.py +++ b/core/test_package/conanfile.py @@ -1,7 +1,6 @@ import sys import pathlib import subprocess -import conan from conan import ConanFile from conan.tools.cmake import CMake, cmake_layout @@ -33,10 +32,7 @@ def build(self): @property def _core_package_path(self): - if conan.__version__.startswith("2"): - return pathlib.Path(self.dependencies["embedded_python-core"].package_folder) - else: - return pathlib.Path(self.deps_cpp_info["embedded_python-core"].rootpath) + return pathlib.Path(self.dependencies["embedded_python-core"].package_folder) @property def _py_exe(self): diff --git a/license.md b/license.md index c48cb26..70cfb37 100644 --- a/license.md +++ b/license.md @@ -1,4 +1,4 @@ -Copyright (c) 2021, LUMICKS B.V. +Copyright (c) 2025, LUMICKS B.V. Apache License, Version 2.0, January 2004, http://www.apache.org/licenses/ diff --git a/pyproject.toml b/pyproject.toml index 83e2916..34e3cc9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.black] line-length = 100 -target-version = ['py311'] +target-version = ['py312'] extend-exclude = ''' ( /( diff --git a/test_package/conanfile.py b/test_package/conanfile.py index 4e0e19f..0eb3949 100644 --- a/test_package/conanfile.py +++ b/test_package/conanfile.py @@ -1,7 +1,6 @@ import sys import pathlib import subprocess -import conan from conan import ConanFile from conan.tools.cmake import CMake, cmake_layout @@ -27,17 +26,11 @@ class TestEmbeddedPython(ConanFile): @property def _core_package_path(self): - if conan.__version__.startswith("2"): - return pathlib.Path(self.dependencies["embedded_python-core"].package_folder) - else: - return pathlib.Path(self.deps_cpp_info["embedded_python-core"].rootpath) + return pathlib.Path(self.dependencies["embedded_python-core"].package_folder) @property def _package_path(self): - if conan.__version__.startswith("2"): - return pathlib.Path(self.dependencies["embedded_python"].package_folder) - else: - return pathlib.Path(self.deps_cpp_info["embedded_python"].rootpath) + return pathlib.Path(self.dependencies["embedded_python"].package_folder) @property def _py_exe(self): diff --git a/test_package/nbconvert/env/darwin.txt b/test_package/nbconvert/env/darwin.txt index 428dedb..a638deb 100644 --- a/test_package/nbconvert/env/darwin.txt +++ b/test_package/nbconvert/env/darwin.txt @@ -1,24 +1,24 @@ -attrs==23.2.0 +attrs==25.3.0 # via # jsonschema # referencing -beautifulsoup4==4.12.3 +beautifulsoup4==4.13.4 # via nbconvert -bleach==6.1.0 +bleach[css]==6.2.0 # via nbconvert defusedxml==0.7.1 # via nbconvert -fastjsonschema==2.19.1 +fastjsonschema==2.21.1 # via nbformat -jinja2==3.1.4 +jinja2==3.1.6 # via nbconvert -jsonschema==4.22.0 +jsonschema==4.25.0 # via nbformat -jsonschema-specifications==2023.12.1 +jsonschema-specifications==2025.4.1 # via jsonschema -jupyter-client==8.6.2 +jupyter-client==8.6.3 # via nbclient -jupyter-core==5.7.2 +jupyter-core==5.8.1 # via # jupyter-client # nbclient @@ -26,49 +26,47 @@ jupyter-core==5.7.2 # nbformat jupyterlab-pygments==0.3.0 # via nbconvert -markupsafe==2.1.5 +markupsafe==3.0.2 # via # jinja2 # nbconvert -mistune==3.0.2 +mistune==3.1.3 # via nbconvert -nbclient==0.10.0 +nbclient==0.10.2 # via nbconvert -nbconvert==7.16.4 +nbconvert==7.16.6 # via -r test_package/nbconvert/requirements.txt nbformat==5.10.4 # via # nbclient # nbconvert -packaging==24.1 +packaging==25.0 # via nbconvert pandocfilters==1.5.1 # via nbconvert -platformdirs==4.2.2 +platformdirs==4.3.8 # via jupyter-core -pygments==2.18.0 +pygments==2.19.2 # via nbconvert python-dateutil==2.9.0.post0 # via jupyter-client -pyzmq==26.0.3 +pyzmq==27.0.0 # via jupyter-client -referencing==0.35.1 +referencing==0.36.2 # via # jsonschema # jsonschema-specifications -rpds-py==0.18.1 +rpds-py==0.26.0 # via # jsonschema # referencing -six==1.16.0 - # via - # bleach - # python-dateutil -soupsieve==2.5 +six==1.17.0 + # via python-dateutil +soupsieve==2.7 # via beautifulsoup4 -tinycss2==1.3.0 - # via nbconvert -tornado==6.4.1 +tinycss2==1.4.0 + # via bleach +tornado==6.5.1 # via jupyter-client traitlets==5.14.3 # via @@ -77,6 +75,10 @@ traitlets==5.14.3 # nbclient # nbconvert # nbformat +typing-extensions==4.14.1 + # via + # beautifulsoup4 + # referencing webencodings==0.5.1 # via # bleach diff --git a/test_package/nbconvert/env/linux.txt b/test_package/nbconvert/env/linux.txt index 428dedb..a638deb 100644 --- a/test_package/nbconvert/env/linux.txt +++ b/test_package/nbconvert/env/linux.txt @@ -1,24 +1,24 @@ -attrs==23.2.0 +attrs==25.3.0 # via # jsonschema # referencing -beautifulsoup4==4.12.3 +beautifulsoup4==4.13.4 # via nbconvert -bleach==6.1.0 +bleach[css]==6.2.0 # via nbconvert defusedxml==0.7.1 # via nbconvert -fastjsonschema==2.19.1 +fastjsonschema==2.21.1 # via nbformat -jinja2==3.1.4 +jinja2==3.1.6 # via nbconvert -jsonschema==4.22.0 +jsonschema==4.25.0 # via nbformat -jsonschema-specifications==2023.12.1 +jsonschema-specifications==2025.4.1 # via jsonschema -jupyter-client==8.6.2 +jupyter-client==8.6.3 # via nbclient -jupyter-core==5.7.2 +jupyter-core==5.8.1 # via # jupyter-client # nbclient @@ -26,49 +26,47 @@ jupyter-core==5.7.2 # nbformat jupyterlab-pygments==0.3.0 # via nbconvert -markupsafe==2.1.5 +markupsafe==3.0.2 # via # jinja2 # nbconvert -mistune==3.0.2 +mistune==3.1.3 # via nbconvert -nbclient==0.10.0 +nbclient==0.10.2 # via nbconvert -nbconvert==7.16.4 +nbconvert==7.16.6 # via -r test_package/nbconvert/requirements.txt nbformat==5.10.4 # via # nbclient # nbconvert -packaging==24.1 +packaging==25.0 # via nbconvert pandocfilters==1.5.1 # via nbconvert -platformdirs==4.2.2 +platformdirs==4.3.8 # via jupyter-core -pygments==2.18.0 +pygments==2.19.2 # via nbconvert python-dateutil==2.9.0.post0 # via jupyter-client -pyzmq==26.0.3 +pyzmq==27.0.0 # via jupyter-client -referencing==0.35.1 +referencing==0.36.2 # via # jsonschema # jsonschema-specifications -rpds-py==0.18.1 +rpds-py==0.26.0 # via # jsonschema # referencing -six==1.16.0 - # via - # bleach - # python-dateutil -soupsieve==2.5 +six==1.17.0 + # via python-dateutil +soupsieve==2.7 # via beautifulsoup4 -tinycss2==1.3.0 - # via nbconvert -tornado==6.4.1 +tinycss2==1.4.0 + # via bleach +tornado==6.5.1 # via jupyter-client traitlets==5.14.3 # via @@ -77,6 +75,10 @@ traitlets==5.14.3 # nbclient # nbconvert # nbformat +typing-extensions==4.14.1 + # via + # beautifulsoup4 + # referencing webencodings==0.5.1 # via # bleach diff --git a/test_package/nbconvert/env/win32.txt b/test_package/nbconvert/env/win32.txt index f66b490..14abe46 100644 --- a/test_package/nbconvert/env/win32.txt +++ b/test_package/nbconvert/env/win32.txt @@ -1,24 +1,24 @@ -attrs==23.2.0 +attrs==25.3.0 # via # jsonschema # referencing -beautifulsoup4==4.12.3 +beautifulsoup4==4.13.4 # via nbconvert -bleach==6.1.0 +bleach[css]==6.2.0 # via nbconvert defusedxml==0.7.1 # via nbconvert -fastjsonschema==2.19.1 +fastjsonschema==2.21.1 # via nbformat -jinja2==3.1.4 +jinja2==3.1.6 # via nbconvert -jsonschema==4.22.0 +jsonschema==4.25.0 # via nbformat -jsonschema-specifications==2023.12.1 +jsonschema-specifications==2025.4.1 # via jsonschema -jupyter-client==8.6.2 +jupyter-client==8.6.3 # via nbclient -jupyter-core==5.7.2 +jupyter-core==5.8.1 # via # jupyter-client # nbclient @@ -26,51 +26,49 @@ jupyter-core==5.7.2 # nbformat jupyterlab-pygments==0.3.0 # via nbconvert -markupsafe==2.1.5 +markupsafe==3.0.2 # via # jinja2 # nbconvert -mistune==3.0.2 +mistune==3.1.3 # via nbconvert -nbclient==0.10.0 +nbclient==0.10.2 # via nbconvert -nbconvert==7.16.4 +nbconvert==7.16.6 # via -r test_package\nbconvert\requirements.txt nbformat==5.10.4 # via # nbclient # nbconvert -packaging==24.1 +packaging==25.0 # via nbconvert pandocfilters==1.5.1 # via nbconvert -platformdirs==4.2.2 +platformdirs==4.3.8 # via jupyter-core -pygments==2.18.0 +pygments==2.19.2 # via nbconvert python-dateutil==2.9.0.post0 # via jupyter-client -pywin32==306 +pywin32==311 # via jupyter-core -pyzmq==26.0.3 +pyzmq==27.0.0 # via jupyter-client -referencing==0.35.1 +referencing==0.36.2 # via # jsonschema # jsonschema-specifications -rpds-py==0.18.1 +rpds-py==0.26.0 # via # jsonschema # referencing -six==1.16.0 - # via - # bleach - # python-dateutil -soupsieve==2.5 +six==1.17.0 + # via python-dateutil +soupsieve==2.7 # via beautifulsoup4 -tinycss2==1.3.0 - # via nbconvert -tornado==6.4.1 +tinycss2==1.4.0 + # via bleach +tornado==6.5.1 # via jupyter-client traitlets==5.14.3 # via @@ -79,6 +77,10 @@ traitlets==5.14.3 # nbclient # nbconvert # nbformat +typing-extensions==4.14.1 + # via + # beautifulsoup4 + # referencing webencodings==0.5.1 # via # bleach diff --git a/test_package/nbconvert/requirements.txt b/test_package/nbconvert/requirements.txt index 1033e52..ca4778b 100644 --- a/test_package/nbconvert/requirements.txt +++ b/test_package/nbconvert/requirements.txt @@ -1 +1 @@ -nbconvert==7.16.4 +nbconvert==7.16.6 diff --git a/test_package/numpy/env/darwin.txt b/test_package/numpy/env/darwin.txt index ce73156..94f239b 100644 --- a/test_package/numpy/env/darwin.txt +++ b/test_package/numpy/env/darwin.txt @@ -1,24 +1,26 @@ -attrs==23.2.0 +attrs==25.3.0 # via hypothesis execnet==2.1.1 # via pytest-xdist -hypothesis==6.103.1 +hypothesis==6.136.2 # via -r test_package/numpy/requirements.txt -iniconfig==2.0.0 +iniconfig==2.1.0 # via pytest -numpy==1.26.4 +numpy==2.3.1 # via -r test_package/numpy/requirements.txt -packaging==24.1 +packaging==25.0 # via pytest -pluggy==1.5.0 +pluggy==1.6.0 # via pytest -pytest==8.2.2 +pygments==2.19.2 + # via pytest +pytest==8.4.1 # via # -r test_package/numpy/requirements.txt # pytest-xdist -pytest-xdist==3.6.1 +pytest-xdist==3.8.0 # via -r test_package/numpy/requirements.txt sortedcontainers==2.4.0 # via hypothesis -typing-extensions==4.12.2 +typing-extensions==4.14.1 # via -r test_package/numpy/requirements.txt diff --git a/test_package/numpy/env/linux.txt b/test_package/numpy/env/linux.txt index ce73156..94f239b 100644 --- a/test_package/numpy/env/linux.txt +++ b/test_package/numpy/env/linux.txt @@ -1,24 +1,26 @@ -attrs==23.2.0 +attrs==25.3.0 # via hypothesis execnet==2.1.1 # via pytest-xdist -hypothesis==6.103.1 +hypothesis==6.136.2 # via -r test_package/numpy/requirements.txt -iniconfig==2.0.0 +iniconfig==2.1.0 # via pytest -numpy==1.26.4 +numpy==2.3.1 # via -r test_package/numpy/requirements.txt -packaging==24.1 +packaging==25.0 # via pytest -pluggy==1.5.0 +pluggy==1.6.0 # via pytest -pytest==8.2.2 +pygments==2.19.2 + # via pytest +pytest==8.4.1 # via # -r test_package/numpy/requirements.txt # pytest-xdist -pytest-xdist==3.6.1 +pytest-xdist==3.8.0 # via -r test_package/numpy/requirements.txt sortedcontainers==2.4.0 # via hypothesis -typing-extensions==4.12.2 +typing-extensions==4.14.1 # via -r test_package/numpy/requirements.txt diff --git a/test_package/numpy/env/win32.txt b/test_package/numpy/env/win32.txt index 309fb64..a36564e 100644 --- a/test_package/numpy/env/win32.txt +++ b/test_package/numpy/env/win32.txt @@ -1,26 +1,28 @@ -attrs==23.2.0 +attrs==25.3.0 # via hypothesis colorama==0.4.6 # via pytest execnet==2.1.1 # via pytest-xdist -hypothesis==6.103.1 +hypothesis==6.136.2 # via -r test_package\numpy\requirements.txt -iniconfig==2.0.0 +iniconfig==2.1.0 # via pytest -numpy==1.26.4 +numpy==2.3.1 # via -r test_package\numpy\requirements.txt -packaging==24.1 +packaging==25.0 # via pytest -pluggy==1.5.0 +pluggy==1.6.0 # via pytest -pytest==8.2.2 +pygments==2.19.2 + # via pytest +pytest==8.4.1 # via # -r test_package\numpy\requirements.txt # pytest-xdist -pytest-xdist==3.6.1 +pytest-xdist==3.8.0 # via -r test_package\numpy\requirements.txt sortedcontainers==2.4.0 # via hypothesis -typing-extensions==4.12.2 +typing-extensions==4.14.1 # via -r test_package\numpy\requirements.txt diff --git a/test_package/numpy/requirements.txt b/test_package/numpy/requirements.txt index aa1c12d..05a4f2a 100644 --- a/test_package/numpy/requirements.txt +++ b/test_package/numpy/requirements.txt @@ -1,5 +1,5 @@ -hypothesis==6.103.1 -numpy==1.26.4 -pytest-xdist==3.6.1 -pytest==8.2.2 -typing-extensions==4.12.2 +hypothesis==6.136.2 +numpy==2.3.1 +pytest-xdist==3.8.0 +pytest==8.4.1 +typing-extensions==4.14.1 diff --git a/test_package/numpy/test.py b/test_package/numpy/test.py index 746663f..c1502c5 100644 --- a/test_package/numpy/test.py +++ b/test_package/numpy/test.py @@ -1,13 +1,28 @@ """`numpy` distributes its tests: run them""" +import os import sys import numpy as np -# `test_mem_policy.py` and `f2py/*` tests fail with Python 3.11 due to `numpy.distutils` -# deprecations and issues with the latest `setuptools`. Ignore it until it's resolves in `numpy`. -sys.exit( - not np.test( - verbose=2, - extra_argv=["-n", "auto", "-k=not test_mem_policy and not f2py"], - ) -) +# pytest's `--ignore-glob` option (see below) expands patterns as absolute paths in the +# current folder. By default, that's our project folder, but we want to ignore some numpy +# tests so we must target the Python prefix instead. +os.chdir(sys.prefix) + +skip_tests = [ + "test_mem_policy", # requires `meson` + "test_configtool", # `numpy-config` is not on PATH in the embedded env +] + +if sys.version_info < (3, 12): + skip_tests += ["test_public_api"] # fails with Python 3.11 due to `numpy.distutils` + +pytest_args = [ + "-n=auto", + "-k=" + " and ".join([f"not {x}" for x in skip_tests]), + # `f2py` requires `meson` and the tests are very slow so we want to skip them. They must be + # excluded with `ignore-glob` to avoid even collecting them because of import errors. + "--ignore-glob=*f2py*", +] + +sys.exit(not np.test(verbose=2, extra_argv=pytest_args)) diff --git a/test_package/pylake/env/darwin.txt b/test_package/pylake/env/darwin.txt index 26ae3af..5d3667f 100644 --- a/test_package/pylake/env/darwin.txt +++ b/test_package/pylake/env/darwin.txt @@ -1,127 +1,127 @@ -anyio==4.4.0 +anyio==4.9.0 # via # httpx # jupyter-server appnope==0.1.4 # via ipykernel -argon2-cffi==23.1.0 +argon2-cffi==25.1.0 # via jupyter-server argon2-cffi-bindings==21.2.0 # via argon2-cffi arrow==1.3.0 # via isoduration -asttokens==2.4.1 +asttokens==3.0.0 # via stack-data -async-lru==2.0.4 +async-lru==2.0.5 # via jupyterlab -attrs==23.2.0 +attrs==25.3.0 # via # jsonschema # referencing -babel==2.15.0 +babel==2.17.0 # via jupyterlab-server -beautifulsoup4==4.12.3 +beautifulsoup4==4.13.4 # via nbconvert -bleach==6.1.0 +bleach[css]==6.2.0 # via nbconvert -cachetools==5.3.3 +cachetools==6.1.0 # via lumicks-pylake -certifi==2024.6.2 +certifi==2025.7.14 # via # httpcore # httpx # requests -cffi==1.16.0 +cffi==1.17.1 # via argon2-cffi-bindings -charset-normalizer==3.3.2 +charset-normalizer==3.4.2 # via requests comm==0.2.2 # via # ipykernel # ipywidgets -contourpy==1.2.1 +contourpy==1.3.2 # via matplotlib cycler==0.12.1 # via matplotlib -debugpy==1.8.1 +debugpy==1.8.15 # via ipykernel -decorator==5.1.1 +decorator==5.2.1 # via ipython defusedxml==0.7.1 # via nbconvert -deprecated==1.2.14 +deprecated==1.2.18 # via lumicks-pylake -executing==2.0.1 +executing==2.2.0 # via stack-data -fastjsonschema==2.19.1 +fastjsonschema==2.21.1 # via nbformat -fonttools==4.53.0 +fonttools==4.59.0 # via matplotlib fqdn==1.5.1 # via jsonschema -h11==0.14.0 +h11==0.16.0 # via httpcore -h5py==3.11.0 +h5py==3.14.0 # via lumicks-pylake -httpcore==1.0.5 +httpcore==1.0.9 # via httpx -httpx==0.27.0 +httpx==0.28.1 # via jupyterlab -idna==3.7 +idna==3.10 # via # anyio # httpx # jsonschema # requests -imageio==2.34.1 +imageio==2.37.0 # via scikit-image -iniconfig==2.0.0 +iniconfig==2.1.0 # via pytest -ipykernel==6.29.4 +ipykernel==6.30.0 # via jupyterlab -ipympl==0.9.4 +ipympl==0.9.7 # via lumicks-pylake -ipython==8.25.0 +ipython==9.4.0 # via # ipykernel # ipympl # ipywidgets -ipython-genutils==0.2.0 - # via ipympl -ipywidgets==8.1.3 +ipython-pygments-lexers==1.1.1 + # via ipython +ipywidgets==8.1.7 # via # ipympl # lumicks-pylake isoduration==20.11.0 # via jsonschema -jedi==0.19.1 +jedi==0.19.2 # via ipython -jinja2==3.1.4 +jinja2==3.1.6 # via # jupyter-server # jupyterlab # jupyterlab-server # nbconvert -joblib==1.4.2 +joblib==1.5.1 # via scikit-learn -json5==0.9.25 +json5==0.12.0 # via jupyterlab-server jsonpointer==3.0.0 # via jsonschema -jsonschema[format-nongpl]==4.22.0 +jsonschema[format-nongpl]==4.25.0 # via # jupyter-events # jupyterlab-server # nbformat -jsonschema-specifications==2023.12.1 +jsonschema-specifications==2025.4.1 # via jsonschema -jupyter-client==8.6.2 +jupyter-client==8.6.3 # via # ipykernel # jupyter-server # lumicks-pylake # nbclient -jupyter-core==5.7.2 +jupyter-core==5.8.1 # via # ipykernel # jupyter-client @@ -130,11 +130,11 @@ jupyter-core==5.7.2 # nbclient # nbconvert # nbformat -jupyter-events==0.10.0 +jupyter-events==0.12.0 # via jupyter-server -jupyter-lsp==2.2.5 +jupyter-lsp==2.2.6 # via jupyterlab -jupyter-server==2.14.1 +jupyter-server==2.16.0 # via # jupyter-lsp # jupyterlab @@ -143,29 +143,31 @@ jupyter-server==2.14.1 # notebook-shim jupyter-server-terminals==0.5.3 # via jupyter-server -jupyterlab==4.2.2 +jupyterlab==4.4.5 # via notebook jupyterlab-pygments==0.3.0 # via nbconvert -jupyterlab-server==2.27.2 +jupyterlab-server==2.27.3 # via # jupyterlab # notebook -jupyterlab-widgets==3.0.11 +jupyterlab-widgets==3.0.15 # via ipywidgets -kiwisolver==1.4.5 +kiwisolver==1.4.8 # via matplotlib +lark==1.2.2 + # via rfc3987-syntax lazy-loader==0.4 # via scikit-image -lumicks-pylake[notebook] @ git+https://github.com/lumicks/pylake@86d6a6bd2d2acf5463869d74e69d2a34b0e962c2 +lumicks-pylake[notebook] @ git+https://github.com/lumicks/pylake@a149f57d6a97ad0140ad514a71e28aeb9921b857 # via # -r test_package/pylake/requirements.txt # lumicks-pylake -markupsafe==2.1.5 +markupsafe==3.0.2 # via # jinja2 # nbconvert -matplotlib==3.9.0 +matplotlib==3.10.3 # via # ipympl # lumicks-pylake @@ -173,11 +175,11 @@ matplotlib-inline==0.1.7 # via # ipykernel # ipython -mistune==3.0.2 +mistune==3.1.3 # via nbconvert -nbclient==0.10.0 +nbclient==0.10.2 # via nbconvert -nbconvert==7.16.4 +nbconvert==7.16.6 # via jupyter-server nbformat==5.10.4 # via @@ -186,15 +188,15 @@ nbformat==5.10.4 # nbconvert nest-asyncio==1.6.0 # via ipykernel -networkx==3.3 +networkx==3.5 # via scikit-image -notebook==7.2.1 +notebook==7.4.4 # via lumicks-pylake notebook-shim==0.2.4 # via # jupyterlab # notebook -numpy==1.26.4 +numpy==2.3.1 # via # contourpy # h5py @@ -208,9 +210,10 @@ numpy==1.26.4 # tifffile overrides==7.7.0 # via jupyter-server -packaging==24.1 +packaging==25.0 # via # ipykernel + # jupyter-events # jupyter-server # jupyterlab # jupyterlab-server @@ -225,58 +228,60 @@ parso==0.8.4 # via jedi pexpect==4.9.0 # via ipython -pillow==10.3.0 +pillow==11.3.0 # via # imageio # ipympl # matplotlib # scikit-image -platformdirs==4.2.2 +platformdirs==4.3.8 # via jupyter-core -pluggy==1.5.0 +pluggy==1.6.0 # via pytest -prometheus-client==0.20.0 +prometheus-client==0.22.1 # via jupyter-server -prompt-toolkit==3.0.47 +prompt-toolkit==3.0.51 # via ipython -psutil==5.9.8 +psutil==7.0.0 # via ipykernel ptyprocess==0.7.0 # via # pexpect # terminado -pure-eval==0.2.2 +pure-eval==0.2.3 # via stack-data pycparser==2.22 # via cffi -pygments==2.18.0 +pygments==2.19.2 # via # ipython + # ipython-pygments-lexers # nbconvert -pyparsing==3.1.2 + # pytest +pyparsing==3.2.3 # via matplotlib -pytest==8.2.2 +pytest==8.4.1 # via lumicks-pylake python-dateutil==2.9.0.post0 # via # arrow # jupyter-client # matplotlib -python-json-logger==2.0.7 +python-json-logger==3.3.0 # via jupyter-events -pyyaml==6.0.1 +pyyaml==6.0.2 # via jupyter-events -pyzmq==26.0.3 +pyzmq==27.0.0 # via # ipykernel # jupyter-client # jupyter-server -referencing==0.35.1 +referencing==0.36.2 # via # jsonschema # jsonschema-specifications # jupyter-events -requests==2.32.3 +requests==2.32.4 # via jupyterlab-server rfc3339-validator==0.1.4 # via @@ -286,32 +291,30 @@ rfc3986-validator==0.1.1 # via # jsonschema # jupyter-events -rpds-py==0.18.1 +rfc3987-syntax==1.1.0 + # via jsonschema +rpds-py==0.26.0 # via # jsonschema # referencing -scikit-image==0.23.2 +scikit-image==0.25.2 # via lumicks-pylake -scikit-learn==1.5.0 +scikit-learn==1.7.1 # via lumicks-pylake -scipy==1.13.1 +scipy==1.16.0 # via # lumicks-pylake # scikit-image # scikit-learn send2trash==1.8.3 # via jupyter-server -six==1.16.0 +six==1.17.0 # via - # asttokens - # bleach # python-dateutil # rfc3339-validator sniffio==1.3.1 - # via - # anyio - # httpx -soupsieve==2.5 + # via anyio +soupsieve==2.7 # via beautifulsoup4 stack-data==0.6.3 # via ipython @@ -321,15 +324,15 @@ terminado==0.18.1 # via # jupyter-server # jupyter-server-terminals -threadpoolctl==3.5.0 +threadpoolctl==3.6.0 # via scikit-learn -tifffile==2024.5.22 +tifffile==2025.6.11 # via # lumicks-pylake # scikit-image -tinycss2==1.3.0 - # via nbconvert -tornado==6.4.1 +tinycss2==1.4.0 + # via bleach +tornado==6.5.1 # via # ipykernel # jupyter-client @@ -337,7 +340,7 @@ tornado==6.4.1 # jupyterlab # notebook # terminado -tqdm==4.66.4 +tqdm==4.67.1 # via lumicks-pylake traitlets==5.14.3 # via @@ -355,17 +358,21 @@ traitlets==5.14.3 # nbclient # nbconvert # nbformat -types-python-dateutil==2.9.0.20240316 +types-python-dateutil==2.9.0.20250708 # via arrow -typing-extensions==4.12.2 - # via ipython +typing-extensions==4.14.1 + # via + # anyio + # beautifulsoup4 + # ipython + # referencing uri-template==1.3.0 # via jsonschema -urllib3==2.2.1 +urllib3==2.5.0 # via requests wcwidth==0.2.13 # via prompt-toolkit -webcolors==24.6.0 +webcolors==24.11.1 # via jsonschema webencodings==0.5.1 # via @@ -373,9 +380,9 @@ webencodings==0.5.1 # tinycss2 websocket-client==1.8.0 # via jupyter-server -widgetsnbextension==4.0.11 +widgetsnbextension==4.0.14 # via ipywidgets -wrapt==1.16.0 +wrapt==1.17.2 # via deprecated # The following packages are considered to be unsafe in a requirements file: diff --git a/test_package/pylake/env/linux.txt b/test_package/pylake/env/linux.txt index 05a8dde..e679a84 100644 --- a/test_package/pylake/env/linux.txt +++ b/test_package/pylake/env/linux.txt @@ -1,125 +1,125 @@ -anyio==4.4.0 +anyio==4.9.0 # via # httpx # jupyter-server -argon2-cffi==23.1.0 +argon2-cffi==25.1.0 # via jupyter-server argon2-cffi-bindings==21.2.0 # via argon2-cffi arrow==1.3.0 # via isoduration -asttokens==2.4.1 +asttokens==3.0.0 # via stack-data -async-lru==2.0.4 +async-lru==2.0.5 # via jupyterlab -attrs==23.2.0 +attrs==25.3.0 # via # jsonschema # referencing -babel==2.15.0 +babel==2.17.0 # via jupyterlab-server -beautifulsoup4==4.12.3 +beautifulsoup4==4.13.4 # via nbconvert -bleach==6.1.0 +bleach[css]==6.2.0 # via nbconvert -cachetools==5.3.3 +cachetools==6.1.0 # via lumicks-pylake -certifi==2024.6.2 +certifi==2025.7.14 # via # httpcore # httpx # requests -cffi==1.16.0 +cffi==1.17.1 # via argon2-cffi-bindings -charset-normalizer==3.3.2 +charset-normalizer==3.4.2 # via requests comm==0.2.2 # via # ipykernel # ipywidgets -contourpy==1.2.1 +contourpy==1.3.2 # via matplotlib cycler==0.12.1 # via matplotlib -debugpy==1.8.1 +debugpy==1.8.15 # via ipykernel -decorator==5.1.1 +decorator==5.2.1 # via ipython defusedxml==0.7.1 # via nbconvert -deprecated==1.2.14 +deprecated==1.2.18 # via lumicks-pylake -executing==2.0.1 +executing==2.2.0 # via stack-data -fastjsonschema==2.19.1 +fastjsonschema==2.21.1 # via nbformat -fonttools==4.53.0 +fonttools==4.59.0 # via matplotlib fqdn==1.5.1 # via jsonschema -h11==0.14.0 +h11==0.16.0 # via httpcore -h5py==3.11.0 +h5py==3.14.0 # via lumicks-pylake -httpcore==1.0.5 +httpcore==1.0.9 # via httpx -httpx==0.27.0 +httpx==0.28.1 # via jupyterlab -idna==3.7 +idna==3.10 # via # anyio # httpx # jsonschema # requests -imageio==2.34.1 +imageio==2.37.0 # via scikit-image -iniconfig==2.0.0 +iniconfig==2.1.0 # via pytest -ipykernel==6.29.4 +ipykernel==6.30.0 # via jupyterlab -ipympl==0.9.4 +ipympl==0.9.7 # via lumicks-pylake -ipython==8.25.0 +ipython==9.4.0 # via # ipykernel # ipympl # ipywidgets -ipython-genutils==0.2.0 - # via ipympl -ipywidgets==8.1.3 +ipython-pygments-lexers==1.1.1 + # via ipython +ipywidgets==8.1.7 # via # ipympl # lumicks-pylake isoduration==20.11.0 # via jsonschema -jedi==0.19.1 +jedi==0.19.2 # via ipython -jinja2==3.1.4 +jinja2==3.1.6 # via # jupyter-server # jupyterlab # jupyterlab-server # nbconvert -joblib==1.4.2 +joblib==1.5.1 # via scikit-learn -json5==0.9.25 +json5==0.12.0 # via jupyterlab-server jsonpointer==3.0.0 # via jsonschema -jsonschema[format-nongpl]==4.22.0 +jsonschema[format-nongpl]==4.25.0 # via # jupyter-events # jupyterlab-server # nbformat -jsonschema-specifications==2023.12.1 +jsonschema-specifications==2025.4.1 # via jsonschema -jupyter-client==8.6.2 +jupyter-client==8.6.3 # via # ipykernel # jupyter-server # lumicks-pylake # nbclient -jupyter-core==5.7.2 +jupyter-core==5.8.1 # via # ipykernel # jupyter-client @@ -128,11 +128,11 @@ jupyter-core==5.7.2 # nbclient # nbconvert # nbformat -jupyter-events==0.10.0 +jupyter-events==0.12.0 # via jupyter-server -jupyter-lsp==2.2.5 +jupyter-lsp==2.2.6 # via jupyterlab -jupyter-server==2.14.1 +jupyter-server==2.16.0 # via # jupyter-lsp # jupyterlab @@ -141,29 +141,31 @@ jupyter-server==2.14.1 # notebook-shim jupyter-server-terminals==0.5.3 # via jupyter-server -jupyterlab==4.2.2 +jupyterlab==4.4.5 # via notebook jupyterlab-pygments==0.3.0 # via nbconvert -jupyterlab-server==2.27.2 +jupyterlab-server==2.27.3 # via # jupyterlab # notebook -jupyterlab-widgets==3.0.11 +jupyterlab-widgets==3.0.15 # via ipywidgets -kiwisolver==1.4.5 +kiwisolver==1.4.8 # via matplotlib +lark==1.2.2 + # via rfc3987-syntax lazy-loader==0.4 # via scikit-image -lumicks-pylake[notebook] @ git+https://github.com/lumicks/pylake@86d6a6bd2d2acf5463869d74e69d2a34b0e962c2 +lumicks-pylake[notebook] @ git+https://github.com/lumicks/pylake@a149f57d6a97ad0140ad514a71e28aeb9921b857 # via # -r test_package/pylake/requirements.txt # lumicks-pylake -markupsafe==2.1.5 +markupsafe==3.0.2 # via # jinja2 # nbconvert -matplotlib==3.9.0 +matplotlib==3.10.3 # via # ipympl # lumicks-pylake @@ -171,11 +173,11 @@ matplotlib-inline==0.1.7 # via # ipykernel # ipython -mistune==3.0.2 +mistune==3.1.3 # via nbconvert -nbclient==0.10.0 +nbclient==0.10.2 # via nbconvert -nbconvert==7.16.4 +nbconvert==7.16.6 # via jupyter-server nbformat==5.10.4 # via @@ -184,15 +186,15 @@ nbformat==5.10.4 # nbconvert nest-asyncio==1.6.0 # via ipykernel -networkx==3.3 +networkx==3.5 # via scikit-image -notebook==7.2.1 +notebook==7.4.4 # via lumicks-pylake notebook-shim==0.2.4 # via # jupyterlab # notebook -numpy==1.26.4 +numpy==2.3.1 # via # contourpy # h5py @@ -206,9 +208,10 @@ numpy==1.26.4 # tifffile overrides==7.7.0 # via jupyter-server -packaging==24.1 +packaging==25.0 # via # ipykernel + # jupyter-events # jupyter-server # jupyterlab # jupyterlab-server @@ -223,58 +226,60 @@ parso==0.8.4 # via jedi pexpect==4.9.0 # via ipython -pillow==10.3.0 +pillow==11.3.0 # via # imageio # ipympl # matplotlib # scikit-image -platformdirs==4.2.2 +platformdirs==4.3.8 # via jupyter-core -pluggy==1.5.0 +pluggy==1.6.0 # via pytest -prometheus-client==0.20.0 +prometheus-client==0.22.1 # via jupyter-server -prompt-toolkit==3.0.47 +prompt-toolkit==3.0.51 # via ipython -psutil==5.9.8 +psutil==7.0.0 # via ipykernel ptyprocess==0.7.0 # via # pexpect # terminado -pure-eval==0.2.2 +pure-eval==0.2.3 # via stack-data pycparser==2.22 # via cffi -pygments==2.18.0 +pygments==2.19.2 # via # ipython + # ipython-pygments-lexers # nbconvert -pyparsing==3.1.2 + # pytest +pyparsing==3.2.3 # via matplotlib -pytest==8.2.2 +pytest==8.4.1 # via lumicks-pylake python-dateutil==2.9.0.post0 # via # arrow # jupyter-client # matplotlib -python-json-logger==2.0.7 +python-json-logger==3.3.0 # via jupyter-events -pyyaml==6.0.1 +pyyaml==6.0.2 # via jupyter-events -pyzmq==26.0.3 +pyzmq==27.0.0 # via # ipykernel # jupyter-client # jupyter-server -referencing==0.35.1 +referencing==0.36.2 # via # jsonschema # jsonschema-specifications # jupyter-events -requests==2.32.3 +requests==2.32.4 # via jupyterlab-server rfc3339-validator==0.1.4 # via @@ -284,32 +289,30 @@ rfc3986-validator==0.1.1 # via # jsonschema # jupyter-events -rpds-py==0.18.1 +rfc3987-syntax==1.1.0 + # via jsonschema +rpds-py==0.26.0 # via # jsonschema # referencing -scikit-image==0.23.2 +scikit-image==0.25.2 # via lumicks-pylake -scikit-learn==1.5.0 +scikit-learn==1.7.1 # via lumicks-pylake -scipy==1.13.1 +scipy==1.16.0 # via # lumicks-pylake # scikit-image # scikit-learn send2trash==1.8.3 # via jupyter-server -six==1.16.0 +six==1.17.0 # via - # asttokens - # bleach # python-dateutil # rfc3339-validator sniffio==1.3.1 - # via - # anyio - # httpx -soupsieve==2.5 + # via anyio +soupsieve==2.7 # via beautifulsoup4 stack-data==0.6.3 # via ipython @@ -319,15 +322,15 @@ terminado==0.18.1 # via # jupyter-server # jupyter-server-terminals -threadpoolctl==3.5.0 +threadpoolctl==3.6.0 # via scikit-learn -tifffile==2024.5.22 +tifffile==2025.6.11 # via # lumicks-pylake # scikit-image -tinycss2==1.3.0 - # via nbconvert -tornado==6.4.1 +tinycss2==1.4.0 + # via bleach +tornado==6.5.1 # via # ipykernel # jupyter-client @@ -335,7 +338,7 @@ tornado==6.4.1 # jupyterlab # notebook # terminado -tqdm==4.66.4 +tqdm==4.67.1 # via lumicks-pylake traitlets==5.14.3 # via @@ -353,17 +356,21 @@ traitlets==5.14.3 # nbclient # nbconvert # nbformat -types-python-dateutil==2.9.0.20240316 +types-python-dateutil==2.9.0.20250708 # via arrow -typing-extensions==4.12.2 - # via ipython +typing-extensions==4.14.1 + # via + # anyio + # beautifulsoup4 + # ipython + # referencing uri-template==1.3.0 # via jsonschema -urllib3==2.2.1 +urllib3==2.5.0 # via requests wcwidth==0.2.13 # via prompt-toolkit -webcolors==24.6.0 +webcolors==24.11.1 # via jsonschema webencodings==0.5.1 # via @@ -371,9 +378,9 @@ webencodings==0.5.1 # tinycss2 websocket-client==1.8.0 # via jupyter-server -widgetsnbextension==4.0.11 +widgetsnbextension==4.0.14 # via ipywidgets -wrapt==1.16.0 +wrapt==1.17.2 # via deprecated # The following packages are considered to be unsafe in a requirements file: diff --git a/test_package/pylake/env/win32.txt b/test_package/pylake/env/win32.txt index 89d5762..db73bdf 100644 --- a/test_package/pylake/env/win32.txt +++ b/test_package/pylake/env/win32.txt @@ -1,37 +1,37 @@ -anyio==4.4.0 +anyio==4.9.0 # via # httpx # jupyter-server -argon2-cffi==23.1.0 +argon2-cffi==25.1.0 # via jupyter-server argon2-cffi-bindings==21.2.0 # via argon2-cffi arrow==1.3.0 # via isoduration -asttokens==2.4.1 +asttokens==3.0.0 # via stack-data -async-lru==2.0.4 +async-lru==2.0.5 # via jupyterlab -attrs==23.2.0 +attrs==25.3.0 # via # jsonschema # referencing -babel==2.15.0 +babel==2.17.0 # via jupyterlab-server -beautifulsoup4==4.12.3 +beautifulsoup4==4.13.4 # via nbconvert -bleach==6.1.0 +bleach[css]==6.2.0 # via nbconvert -cachetools==5.3.3 +cachetools==6.1.0 # via lumicks-pylake -certifi==2024.6.2 +certifi==2025.7.14 # via # httpcore # httpx # requests -cffi==1.16.0 +cffi==1.17.1 # via argon2-cffi-bindings -charset-normalizer==3.3.2 +charset-normalizer==3.4.2 # via requests colorama==0.4.6 # via @@ -42,89 +42,89 @@ comm==0.2.2 # via # ipykernel # ipywidgets -contourpy==1.2.1 +contourpy==1.3.2 # via matplotlib cycler==0.12.1 # via matplotlib -debugpy==1.8.1 +debugpy==1.8.15 # via ipykernel -decorator==5.1.1 +decorator==5.2.1 # via ipython defusedxml==0.7.1 # via nbconvert -deprecated==1.2.14 +deprecated==1.2.18 # via lumicks-pylake -executing==2.0.1 +executing==2.2.0 # via stack-data -fastjsonschema==2.19.1 +fastjsonschema==2.21.1 # via nbformat -fonttools==4.53.0 +fonttools==4.59.0 # via matplotlib fqdn==1.5.1 # via jsonschema -h11==0.14.0 +h11==0.16.0 # via httpcore -h5py==3.11.0 +h5py==3.14.0 # via lumicks-pylake -httpcore==1.0.5 +httpcore==1.0.9 # via httpx -httpx==0.27.0 +httpx==0.28.1 # via jupyterlab -idna==3.7 +idna==3.10 # via # anyio # httpx # jsonschema # requests -imageio==2.34.1 +imageio==2.37.0 # via scikit-image -iniconfig==2.0.0 +iniconfig==2.1.0 # via pytest -ipykernel==6.29.4 +ipykernel==6.30.0 # via jupyterlab -ipympl==0.9.4 +ipympl==0.9.7 # via lumicks-pylake -ipython==8.25.0 +ipython==9.4.0 # via # ipykernel # ipympl # ipywidgets -ipython-genutils==0.2.0 - # via ipympl -ipywidgets==8.1.3 +ipython-pygments-lexers==1.1.1 + # via ipython +ipywidgets==8.1.7 # via # ipympl # lumicks-pylake isoduration==20.11.0 # via jsonschema -jedi==0.19.1 +jedi==0.19.2 # via ipython -jinja2==3.1.4 +jinja2==3.1.6 # via # jupyter-server # jupyterlab # jupyterlab-server # nbconvert -joblib==1.4.2 +joblib==1.5.1 # via scikit-learn -json5==0.9.25 +json5==0.12.0 # via jupyterlab-server jsonpointer==3.0.0 # via jsonschema -jsonschema[format-nongpl]==4.22.0 +jsonschema[format-nongpl]==4.25.0 # via # jupyter-events # jupyterlab-server # nbformat -jsonschema-specifications==2023.12.1 +jsonschema-specifications==2025.4.1 # via jsonschema -jupyter-client==8.6.2 +jupyter-client==8.6.3 # via # ipykernel # jupyter-server # lumicks-pylake # nbclient -jupyter-core==5.7.2 +jupyter-core==5.8.1 # via # ipykernel # jupyter-client @@ -133,11 +133,11 @@ jupyter-core==5.7.2 # nbclient # nbconvert # nbformat -jupyter-events==0.10.0 +jupyter-events==0.12.0 # via jupyter-server -jupyter-lsp==2.2.5 +jupyter-lsp==2.2.6 # via jupyterlab -jupyter-server==2.14.1 +jupyter-server==2.16.0 # via # jupyter-lsp # jupyterlab @@ -146,29 +146,31 @@ jupyter-server==2.14.1 # notebook-shim jupyter-server-terminals==0.5.3 # via jupyter-server -jupyterlab==4.2.2 +jupyterlab==4.4.5 # via notebook jupyterlab-pygments==0.3.0 # via nbconvert -jupyterlab-server==2.27.2 +jupyterlab-server==2.27.3 # via # jupyterlab # notebook -jupyterlab-widgets==3.0.11 +jupyterlab-widgets==3.0.15 # via ipywidgets -kiwisolver==1.4.5 +kiwisolver==1.4.8 # via matplotlib +lark==1.2.2 + # via rfc3987-syntax lazy-loader==0.4 # via scikit-image -lumicks-pylake[notebook] @ git+https://github.com/lumicks/pylake@86d6a6bd2d2acf5463869d74e69d2a34b0e962c2 +lumicks-pylake[notebook] @ git+https://github.com/lumicks/pylake@a149f57d6a97ad0140ad514a71e28aeb9921b857 # via # -r test_package\pylake\requirements.txt # lumicks-pylake -markupsafe==2.1.5 +markupsafe==3.0.2 # via # jinja2 # nbconvert -matplotlib==3.9.0 +matplotlib==3.10.3 # via # ipympl # lumicks-pylake @@ -176,11 +178,11 @@ matplotlib-inline==0.1.7 # via # ipykernel # ipython -mistune==3.0.2 +mistune==3.1.3 # via nbconvert -nbclient==0.10.0 +nbclient==0.10.2 # via nbconvert -nbconvert==7.16.4 +nbconvert==7.16.6 # via jupyter-server nbformat==5.10.4 # via @@ -189,15 +191,15 @@ nbformat==5.10.4 # nbconvert nest-asyncio==1.6.0 # via ipykernel -networkx==3.3 +networkx==3.5 # via scikit-image -notebook==7.2.1 +notebook==7.4.4 # via lumicks-pylake notebook-shim==0.2.4 # via # jupyterlab # notebook -numpy==1.26.4 +numpy==2.3.1 # via # contourpy # h5py @@ -211,9 +213,10 @@ numpy==1.26.4 # tifffile overrides==7.7.0 # via jupyter-server -packaging==24.1 +packaging==25.0 # via # ipykernel + # jupyter-events # jupyter-server # jupyterlab # jupyterlab-server @@ -226,61 +229,63 @@ pandocfilters==1.5.1 # via nbconvert parso==0.8.4 # via jedi -pillow==10.3.0 +pillow==11.3.0 # via # imageio # ipympl # matplotlib # scikit-image -platformdirs==4.2.2 +platformdirs==4.3.8 # via jupyter-core -pluggy==1.5.0 +pluggy==1.6.0 # via pytest -prometheus-client==0.20.0 +prometheus-client==0.22.1 # via jupyter-server -prompt-toolkit==3.0.47 +prompt-toolkit==3.0.51 # via ipython -psutil==5.9.8 +psutil==7.0.0 # via ipykernel -pure-eval==0.2.2 +pure-eval==0.2.3 # via stack-data pycparser==2.22 # via cffi -pygments==2.18.0 +pygments==2.19.2 # via # ipython + # ipython-pygments-lexers # nbconvert -pyparsing==3.1.2 + # pytest +pyparsing==3.2.3 # via matplotlib -pytest==8.2.2 +pytest==8.4.1 # via lumicks-pylake python-dateutil==2.9.0.post0 # via # arrow # jupyter-client # matplotlib -python-json-logger==2.0.7 +python-json-logger==3.3.0 # via jupyter-events -pywin32==306 +pywin32==311 # via jupyter-core -pywinpty==2.0.13 +pywinpty==2.0.15 # via # jupyter-server # jupyter-server-terminals # terminado -pyyaml==6.0.1 +pyyaml==6.0.2 # via jupyter-events -pyzmq==26.0.3 +pyzmq==27.0.0 # via # ipykernel # jupyter-client # jupyter-server -referencing==0.35.1 +referencing==0.36.2 # via # jsonschema # jsonschema-specifications # jupyter-events -requests==2.32.3 +requests==2.32.4 # via jupyterlab-server rfc3339-validator==0.1.4 # via @@ -290,32 +295,30 @@ rfc3986-validator==0.1.1 # via # jsonschema # jupyter-events -rpds-py==0.18.1 +rfc3987-syntax==1.1.0 + # via jsonschema +rpds-py==0.26.0 # via # jsonschema # referencing -scikit-image==0.23.2 +scikit-image==0.25.2 # via lumicks-pylake -scikit-learn==1.5.0 +scikit-learn==1.7.1 # via lumicks-pylake -scipy==1.13.1 +scipy==1.16.0 # via # lumicks-pylake # scikit-image # scikit-learn send2trash==1.8.3 # via jupyter-server -six==1.16.0 +six==1.17.0 # via - # asttokens - # bleach # python-dateutil # rfc3339-validator sniffio==1.3.1 - # via - # anyio - # httpx -soupsieve==2.5 + # via anyio +soupsieve==2.7 # via beautifulsoup4 stack-data==0.6.3 # via ipython @@ -325,15 +328,15 @@ terminado==0.18.1 # via # jupyter-server # jupyter-server-terminals -threadpoolctl==3.5.0 +threadpoolctl==3.6.0 # via scikit-learn -tifffile==2024.5.22 +tifffile==2025.6.11 # via # lumicks-pylake # scikit-image -tinycss2==1.3.0 - # via nbconvert -tornado==6.4.1 +tinycss2==1.4.0 + # via bleach +tornado==6.5.1 # via # ipykernel # jupyter-client @@ -341,7 +344,7 @@ tornado==6.4.1 # jupyterlab # notebook # terminado -tqdm==4.66.4 +tqdm==4.67.1 # via lumicks-pylake traitlets==5.14.3 # via @@ -359,17 +362,21 @@ traitlets==5.14.3 # nbclient # nbconvert # nbformat -types-python-dateutil==2.9.0.20240316 +types-python-dateutil==2.9.0.20250708 # via arrow -typing-extensions==4.12.2 - # via ipython +typing-extensions==4.14.1 + # via + # anyio + # beautifulsoup4 + # ipython + # referencing uri-template==1.3.0 # via jsonschema -urllib3==2.2.1 +urllib3==2.5.0 # via requests wcwidth==0.2.13 # via prompt-toolkit -webcolors==24.6.0 +webcolors==24.11.1 # via jsonschema webencodings==0.5.1 # via @@ -377,9 +384,9 @@ webencodings==0.5.1 # tinycss2 websocket-client==1.8.0 # via jupyter-server -widgetsnbextension==4.0.11 +widgetsnbextension==4.0.14 # via ipywidgets -wrapt==1.16.0 +wrapt==1.17.2 # via deprecated # The following packages are considered to be unsafe in a requirements file: diff --git a/test_package/pylake/requirements.txt b/test_package/pylake/requirements.txt index 359685a..1dcaef2 100644 --- a/test_package/pylake/requirements.txt +++ b/test_package/pylake/requirements.txt @@ -1,2 +1,2 @@ -lumicks.pylake[notebook] @ git+https://github.com/lumicks/pylake@86d6a6bd2d2acf5463869d74e69d2a34b0e962c2 - # Equivalent to pylake 1.5.1 but using a specific commit to validate the functionality +lumicks.pylake[notebook] @ git+https://github.com/lumicks/pylake@a149f57d6a97ad0140ad514a71e28aeb9921b857 + # Equivalent to pylake 1.6.2 but using a specific commit to validate the functionality