From 334fc4fa65578a27123a1382abd21adbf7ef8ade Mon Sep 17 00:00:00 2001 From: Hagen Wierstorf Date: Thu, 31 Jul 2025 10:36:51 +0200 Subject: [PATCH 1/2] Use uv instead of pip --- .github/workflows/doc.yml | 14 ++++++------- .github/workflows/linter.yml | 9 +++++---- .github/workflows/publish.yml | 28 ++++++++++++-------------- .github/workflows/test.yml | 11 +++++----- CONTRIBUTING.rst | 38 ++++++++++++----------------------- docs/requirements.txt | 8 -------- pyproject.toml | 19 ++++++++++++++++++ requirements.txt | 1 - tests/requirements.txt | 3 --- 9 files changed, 61 insertions(+), 70 deletions(-) delete mode 100644 docs/requirements.txt delete mode 100644 requirements.txt delete mode 100644 tests/requirements.txt diff --git a/.github/workflows/doc.yml b/.github/workflows/doc.yml index 6f671c0..42b4429 100644 --- a/.github/workflows/doc.yml +++ b/.github/workflows/doc.yml @@ -23,16 +23,14 @@ jobs: with: python-version: ${{ matrix.python-version }} - - name: Install package - run: | - python -m pip install --upgrade pip - pip install -r requirements.txt + - name: Set up uv + uses: astral-sh/setup-uv@v4 - - name: Install docs requirements - run: pip install -r docs/requirements.txt + - name: Install dependencies + run: uv sync - name: Test building documentation - run: python -m sphinx docs/ docs/_build/ -b html -W + run: uv run sphinx-build docs/ docs/_build/ -b html -W - name: Check links in documentation - run: python -m sphinx docs/ docs/_build/ -b linkcheck -W + run: uv run sphinx-build docs/ docs/_build/ -b linkcheck -W diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index 9fa4a65..6530878 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -19,11 +19,12 @@ jobs: with: python-version: '3.10' + - name: Set up uv + uses: astral-sh/setup-uv@v4 + - name: Install pre-commit hooks run: | - pip install pre-commit - pre-commit install --install-hooks + uvx pre-commit install --install-hooks - name: Code style check via pre-commit - run: | - pre-commit run --all-files + run: uvx pre-commit run --all-files diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index bc73c9b..45b792d 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -34,18 +34,19 @@ jobs: with: python-version: '3.10' + - name: Set up uv + uses: astral-sh/setup-uv@v4 + - name: Install build dependencies - run: | - python -m pip install --upgrade pip - pip install build virtualenv + run: uv sync - name: Build wheels - run: python -m build --wheel --outdir wheelhouse + run: uv build --wheel --out-dir wheelhouse env: PLAT_NAME: ${{ matrix.platform }} - name: Build source distribution - run: python -m build --sdist --outdir wheelhouse + run: uv build --sdist --out-dir wheelhouse if: matrix.platform == 'manylinux_2_17_x86_64' - uses: actions/upload-artifact@v4 @@ -82,14 +83,15 @@ jobs: with: python-version: '3.10' + - name: Set up uv + uses: astral-sh/setup-uv@v4 + - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install build virtualenv + run: uv sync # PyPI package - name: Build Python package - run: python -m build + run: uv build - name: Publish Python package to PyPI uses: pypa/gh-action-pypi-publish@release/v1 @@ -103,14 +105,10 @@ jobs: sudo apt-get -y install libsndfile1 sox - name: Install doc dependencies - run: | - python -m pip install --upgrade pip - pip install -r requirements.txt - pip install -r docs/requirements.txt + run: uv sync - name: Build documentation - run: | - python -m sphinx docs/ docs/_build/ -b html + run: uv run sphinx-build docs/ docs/_build/ -b html - name: Deploy documentation to Github pages uses: peaceiris/actions-gh-pages@v4 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 54e29a6..96d78c5 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -23,6 +23,9 @@ jobs: with: python-version: ${{ matrix.python-version }} + - name: Set up uv + uses: astral-sh/setup-uv@v4 + - name: Setup Ubuntu run: | sudo apt-get update @@ -30,14 +33,10 @@ jobs: if: matrix.os == 'ubuntu-latest' - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install -r requirements.txt - pip install -r tests/requirements.txt + run: uv sync - name: Test with pytest - run: | - python -m pytest + run: uv run pytest - name: Upload coverage to Codecov uses: codecov/codecov-action@v4 diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index 4ff1d60..ea6df1e 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -18,11 +18,8 @@ you should get the newest development version from Github_:: git clone https://github.com/audeering/opensmile-python/ cd opensmile-python - # Create virtual environment for this project - # e.g. - # virtualenv --python="python3" $HOME/.envs/opensmile-python - # source $HOME/.envs/opensmile-python/bin/activate - pip install -r requirements.txt + # Install with development dependencies + uv sync This way, @@ -46,25 +43,22 @@ are defined in :file:`pyproject.toml`. The checks are executed in the CI using `pre-commit`_. You can enable those checks locally by executing:: - pip install pre-commit # consider system wide installation - pre-commit install - pre-commit run --all-files + uvx pre-commit install + uvx pre-commit run --all-files Afterwards ruff_ and codespell_ are executed every time you create a commit. -You can also install ruff_ and codespell_ -and call it directly:: +You can also call ruff_ and codespell_ directly:: - pip install ruff codespell # consider system wide installation - ruff check --fix . # lint all Python files, and fix any fixable errors - ruff format . # format code of all Python files - codespell + uvx ruff check --fix . # lint all Python files, and fix any fixable errors + uvx ruff format . # format code of all Python files + uvx codespell It can be restricted to specific folders:: - ruff check opensmile/ tests/ - codespell opensmile/ tests/ + $ uvx ruff check opensmile/ tests/ + $ uvx codespell opensmile/ tests/ .. _codespell: https://github.com/codespell-project/codespell/ @@ -78,20 +72,17 @@ Building the Documentation If you make changes to the documentation, you can re-create the HTML pages using Sphinx_. -You can install it and a few other necessary packages with:: - - pip install -r docs/requirements.txt To create the HTML pages, use:: - python -m sphinx docs/ build/sphinx/html -b html + $ uv run --python 3.12 sphinx-build docs/ build/sphinx/html -b html The generated files will be available in the directory :file:`build/sphinx/html/`. It is also possible to automatically check if all links are still valid:: - python -m sphinx docs/ build/sphinx/html -b linkcheck + $ uv run --python 3.12 sphinx-build docs/ build/sphinx/html -b linkcheck .. _Sphinx: http://sphinx-doc.org @@ -100,13 +91,10 @@ Running the Tests ----------------- You'll need pytest_ for that. -It can be installed with:: - - pip install -r tests/requirements.txt To execute the tests, simply run:: - python -m pytest + $ uv run pytest .. _pytest: https://pytest.org diff --git a/docs/requirements.txt b/docs/requirements.txt deleted file mode 100644 index ef3c2c2..0000000 --- a/docs/requirements.txt +++ /dev/null @@ -1,8 +0,0 @@ -audb -ipykernel -jupyter-sphinx -sphinx -sphinx-audeering-theme >=1.2.1 -sphinx-autodoc-typehints -sphinx-copybutton -toml diff --git a/pyproject.toml b/pyproject.toml index 24317c2..f25caa7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -46,6 +46,25 @@ repository = 'https://github.com/audeering/opensmile-python/' documentation = 'https://audeering.github.io/opensmile-python/' +# ===== DEPENDENCY GROUPS ================================================= +[dependency-groups] +dev = [ + # Tests + 'pytest', + 'pytest-doctestplus', + 'pytest-cov', + # Docs + 'audb', + 'ipykernel', + 'jupyter-sphinx', + 'sphinx', + 'sphinx-audeering-theme >=1.2.1', + 'sphinx-autodoc-typehints', + 'sphinx-copybutton', + 'toml', +] + + # ===== BUILD-SYSTEM ====================================================== # # Requirements for building the Python package diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index d6e1198..0000000 --- a/requirements.txt +++ /dev/null @@ -1 +0,0 @@ --e . diff --git a/tests/requirements.txt b/tests/requirements.txt deleted file mode 100644 index 9e1875b..0000000 --- a/tests/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -pytest -pytest-doctestplus -pytest-cov From ceacf07a52c36a6dd53d458357837d2b9fb6b2a7 Mon Sep 17 00:00:00 2001 From: Hagen Wierstorf Date: Thu, 31 Jul 2025 10:42:21 +0200 Subject: [PATCH 2/2] Use astral-sh/setup-uv@v5 --- .github/workflows/doc.yml | 2 +- .github/workflows/linter.yml | 2 +- .github/workflows/publish.yml | 2 +- .github/workflows/test.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/doc.yml b/.github/workflows/doc.yml index 42b4429..7ce4e55 100644 --- a/.github/workflows/doc.yml +++ b/.github/workflows/doc.yml @@ -24,7 +24,7 @@ jobs: python-version: ${{ matrix.python-version }} - name: Set up uv - uses: astral-sh/setup-uv@v4 + uses: astral-sh/setup-uv@v5 - name: Install dependencies run: uv sync diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index 6530878..1312182 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -20,7 +20,7 @@ jobs: python-version: '3.10' - name: Set up uv - uses: astral-sh/setup-uv@v4 + uses: astral-sh/setup-uv@v5 - name: Install pre-commit hooks run: | diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 45b792d..6e10d90 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -84,7 +84,7 @@ jobs: python-version: '3.10' - name: Set up uv - uses: astral-sh/setup-uv@v4 + uses: astral-sh/setup-uv@v5 - name: Install dependencies run: uv sync diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 96d78c5..f51ec86 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -24,7 +24,7 @@ jobs: python-version: ${{ matrix.python-version }} - name: Set up uv - uses: astral-sh/setup-uv@v4 + uses: astral-sh/setup-uv@v5 - name: Setup Ubuntu run: |