diff --git a/.github/workflows/doc.yml b/.github/workflows/doc.yml index 20ac001..643a6f0 100644 --- a/.github/workflows/doc.yml +++ b/.github/workflows/doc.yml @@ -29,21 +29,17 @@ jobs: with: python-version: ${{ matrix.python-version }} - - name: Ubuntu - install libsndfile1 - run: | - sudo apt-get update - sudo apt-get install --no-install-recommends --yes libsndfile1 + - name: Install uv + uses: astral-sh/setup-uv@v5 - - name: Install package + - name: Ubuntu - install libsndfile1 and portaudio run: | - python -m pip install --upgrade pip - pip install -r requirements.txt + sudo apt-get update + sudo apt-get install --no-install-recommends --yes libsndfile1 portaudio19-dev - - name: Install docs requirements - run: pip install -r docs/requirements.txt - name: Test building documentation - run: python -m sphinx docs/ docs/_build/ -b html -W + run: uv run python -m sphinx docs/ docs/_build/ -b html -W - name: Check links in documentation - run: python -m sphinx docs/ docs/_build/ -b linkcheck -W + run: uv run python -m sphinx docs/ docs/_build/ -b linkcheck -W diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index 9fa4a65..b2db86f 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -19,11 +19,11 @@ jobs: with: python-version: '3.10' + - name: Install uv + uses: astral-sh/setup-uv@v5 + - name: Install pre-commit hooks - run: | - pip install pre-commit - pre-commit install --install-hooks + run: 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 924992c..80c6fe8 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -25,14 +25,13 @@ jobs: with: python-version: '3.10' - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install build virtualenv + - name: Install uv + uses: astral-sh/setup-uv@v5 + # 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 @@ -42,12 +41,9 @@ jobs: run: | sudo apt-get update sudo apt-get install --no-install-recommends --yes libsndfile1 sox - pip install -r requirements.txt - pip install -r docs/requirements.txt - name: Build documentation - run: | - python -m sphinx docs/ docs/_build/ -b html + run: uv run python -m sphinx 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 0975f52..23a0ef5 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -29,6 +29,9 @@ jobs: with: python-version: ${{ matrix.python-version }} + - name: Install uv + uses: astral-sh/setup-uv@v5 + - name: Prepare Macos run: | brew install portaudio @@ -40,16 +43,11 @@ jobs: sudo apt-get install --no-install-recommends --yes libsndfile1 sox portaudio19-dev if: matrix.os == 'ubuntu-latest' - - name: Install dependencies - run: | - python -V - python -m pip install --upgrade pip - pip install -r requirements.txt - pip install -r tests/requirements.txt + - name: Sync Python environment + 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/.gitignore b/.gitignore index 755bd97..f63c7f3 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ venv/ .coverage coverage.xml docs/api/ +uv.lock diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index 897a49c..2fa99e9 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -22,11 +22,7 @@ you should get the newest development version from Github_:: git clone https://github.com/audeering/audinterface/ cd audinterface - # Create virtual environment for this project - # e.g. - # virtualenv --python="python3" $HOME/.envs/audinterface - # source $HOME/.envs/audinterface/bin/activate - pip install -r requirements.txt + uv sync This way, @@ -50,9 +46,8 @@ 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. @@ -60,15 +55,14 @@ every time you create a commit. You can also install ruff_ and codespell_ and call it 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 audformat/ tests/ - codespell audformat/ tests/ + uvx ruff check audinterface/ tests/ + uvx codespell audinterface/ tests/ .. _codespell: https://github.com/codespell-project/codespell/ @@ -81,21 +75,16 @@ 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:: +you can re-create the HTML pages using Sphinx_:: - pip install -r docs/requirements.txt - -To create the HTML pages, use:: - - python -m sphinx docs/ build/sphinx/html -b html + uv run python -m sphinx docs/ build/html -b html The generated files will be available -in the directory :file:`build/sphinx/html/`. +in the directory :file:`build/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 -m sphinx docs/ build/html -b linkcheck .. _Sphinx: http://sphinx-doc.org @@ -103,14 +92,9 @@ It is also possible to automatically check if all links are still valid:: 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:: +You can run tests with pytest_:: - python -m pytest + uv run pytest .. _pytest: https://pytest.org diff --git a/docs/installation.rst b/docs/installation.rst index b5726a3..7bcce1f 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -5,7 +5,10 @@ To install :mod:`audinterface` run: .. code-block:: bash - $ # Create and activate Python virtual environment, e.g. - $ # virtualenv --no-download --python=python3 ${HOME}/.envs/audinterface - $ # source ${HOME}/.envs/audinterface/bin/activate $ pip install audinterface + +To interactively test it run: + +.. code-block:: bash + + $ uvx --with audinterface ipython diff --git a/docs/requirements.txt b/docs/requirements.txt deleted file mode 100644 index 99e5790..0000000 --- a/docs/requirements.txt +++ /dev/null @@ -1,8 +0,0 @@ -audb >=1.11.0 -audeer -sphinx -sphinx-apipages >=0.1.2 -sphinx-audeering-theme >=1.2.1 -sphinx-autodoc-typehints -sphinx-copybutton -toml diff --git a/pyproject.toml b/pyproject.toml index 2ea7cd4..5567da1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -48,6 +48,30 @@ repository = 'https://github.com/audeering/audinterface/' documentation = 'https://audeering.github.io/audinterface/' +# ===== Dependency groups ================================================= +[dependency-groups] +dev = [ + 'audb >=1.11.0', + 'audeer >=1.21.0', + 'auditok >=0.3.0', + 'audobject >=0.7.5', + 'faster-whisper', # for usage example with ASR + 'librosa >=0.11.0', + 'onnxruntime ==1.19.2 ; python_version == "3.9"', + 'onnxruntime ; python_version >= "3.10"', + 'pytest', + 'pytest-cov', + 'soxr >=0.4.0b1', # for numpy 2 + 'sphinx', + 'sphinx-apipages >=0.1.2', + 'sphinx-audeering-theme >=1.2.1', + 'sphinx-autodoc-typehints', + 'sphinx-copybutton', + 'sybil', + '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 c447782..0000000 --- a/tests/requirements.txt +++ /dev/null @@ -1,10 +0,0 @@ -audeer >=1.21.0 -audb >=1.11.0 -auditok >=0.3.0 -audobject >=0.7.5 -faster-whisper # for usage example with ASR -librosa >=0.11.0 -pytest -pytest-cov -soxr >=0.4.0b1 # for numpy 2, https://github.com/dofuuz/python-soxr/issues/28 -sybil