From a3ede407b63a29b1d7565809d02d9dfff9bd65e5 Mon Sep 17 00:00:00 2001 From: per1234 Date: Tue, 17 Jun 2025 16:22:50 -0700 Subject: [PATCH 1/2] Use `pyproject.toml` as Python version source Python and Python-based tools are used in the development and maintenance of the project. A standardized version of Python is used for these operations. Poetry is used for Python package dependencies management. Poetry installs dependencies into a virtual environment. For this reason, the Poetry configuration includes a Python version number, which must match the correct version of Python for the project. This configuration is stored in the `pyproject.toml` file. Python is installed in the GitHub Actions runner environments using the "actions/setup-python" action, which also must be configured to install the correct version of Python. Previously the version number for use by the actions/setup-python action was defined in each workflow. This meant that we had multiple copies of the Python version information, all of which had to be kept in sync. Fortunately, support for using `pyproject.toml` as the source of version information for the "actions/setup-python" action was recently added. This means it is now possible for all components of the project infrastructure to get the Python version from a single source. --- .github/workflows/check-python-task.yml | 8 ++------ .github/workflows/check-yaml-task.yml | 6 +----- .github/workflows/spell-check-task.yml | 6 +----- .github/workflows/test-python-poetry-task.yml | 6 +----- docs/development.md | 3 +-- workflow-templates/check-mkdocs-task.yml | 6 +----- workflow-templates/check-python-task.yml | 8 ++------ workflow-templates/check-yaml-task.yml | 6 +----- .../deploy-cobra-mkdocs-versioned-poetry.yml | 6 +----- workflow-templates/deploy-mkdocs-poetry.yml | 6 +----- workflow-templates/deploy-mkdocs-versioned-poetry.yml | 6 +----- workflow-templates/spell-check-task.yml | 6 +----- workflow-templates/test-go-integration-task.yml | 6 +----- workflow-templates/test-python-poetry-task.yml | 6 +----- 14 files changed, 16 insertions(+), 69 deletions(-) diff --git a/.github/workflows/check-python-task.yml b/.github/workflows/check-python-task.yml index 1dc0313e..b1adb31d 100644 --- a/.github/workflows/check-python-task.yml +++ b/.github/workflows/check-python-task.yml @@ -1,10 +1,6 @@ # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/check-python-task.md name: Check Python -env: - # See: https://github.com/actions/setup-python/tree/main#available-versions-of-python - PYTHON_VERSION: "3.9" - # See: https://docs.github.com/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows on: create: @@ -73,7 +69,7 @@ jobs: - name: Install Python uses: actions/setup-python@v5 with: - python-version: ${{ env.PYTHON_VERSION }} + python-version-file: pyproject.toml - name: Install Poetry run: pip install poetry @@ -104,7 +100,7 @@ jobs: - name: Install Python uses: actions/setup-python@v5 with: - python-version: ${{ env.PYTHON_VERSION }} + python-version-file: pyproject.toml - name: Install Poetry run: pip install poetry diff --git a/.github/workflows/check-yaml-task.yml b/.github/workflows/check-yaml-task.yml index 9f580dfd..72a6ea0a 100644 --- a/.github/workflows/check-yaml-task.yml +++ b/.github/workflows/check-yaml-task.yml @@ -1,10 +1,6 @@ # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/check-yaml-task.md name: Check YAML -env: - # See: https://github.com/actions/setup-python/tree/main#available-versions-of-python - PYTHON_VERSION: "3.9" - # See: https://docs.github.com/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows on: create: @@ -101,7 +97,7 @@ jobs: - name: Install Python uses: actions/setup-python@v5 with: - python-version: ${{ env.PYTHON_VERSION }} + python-version-file: pyproject.toml - name: Install Poetry run: pip install poetry diff --git a/.github/workflows/spell-check-task.yml b/.github/workflows/spell-check-task.yml index e00c3088..e9edba9f 100644 --- a/.github/workflows/spell-check-task.yml +++ b/.github/workflows/spell-check-task.yml @@ -1,10 +1,6 @@ # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/spell-check-task.md name: Spell Check -env: - # See: https://github.com/actions/setup-python/tree/main#available-versions-of-python - PYTHON_VERSION: "3.9" - # See: https://docs.github.com/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows on: create: @@ -55,7 +51,7 @@ jobs: - name: Install Python uses: actions/setup-python@v5 with: - python-version: ${{ env.PYTHON_VERSION }} + python-version-file: pyproject.toml - name: Install Poetry run: pip install poetry diff --git a/.github/workflows/test-python-poetry-task.yml b/.github/workflows/test-python-poetry-task.yml index a39925e3..f34c8ced 100644 --- a/.github/workflows/test-python-poetry-task.yml +++ b/.github/workflows/test-python-poetry-task.yml @@ -1,10 +1,6 @@ # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/test-python-poetry-task.md name: Test Python -env: - # See: https://github.com/actions/setup-python/tree/main#available-versions-of-python - PYTHON_VERSION: "3.9" - # See: https://docs.github.com/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows on: create: @@ -69,7 +65,7 @@ jobs: - name: Install Python uses: actions/setup-python@v5 with: - python-version: ${{ env.PYTHON_VERSION }} + python-version-file: pyproject.toml - name: Install Poetry run: pip install poetry diff --git a/docs/development.md b/docs/development.md index 78580b2f..158cd3cd 100644 --- a/docs/development.md +++ b/docs/development.md @@ -9,8 +9,7 @@ The following development tools must be available in your local environment: - [**Node.js** / **npm**](https://nodejs.org/en/download/) - Node.js dependencies management tool - The **Node.js** version in use is defined by the `engines.node` key of [`package.json`](../package.json). - [**Python**](https://wiki.python.org/moin/BeginnersGuide/Download) - - - This project uses Python 3.9.x + - The **Python** version in use is defined by the `tool.poetry.dependencies.python` key of [`pyproject.toml`](../pyproject.toml). - [**Poetry**](https://python-poetry.org/docs/#installation) - Python dependencies management tool - [**Task**](https://taskfile.dev/installation/) - task runner tool diff --git a/workflow-templates/check-mkdocs-task.yml b/workflow-templates/check-mkdocs-task.yml index 67efa465..f8590c48 100644 --- a/workflow-templates/check-mkdocs-task.yml +++ b/workflow-templates/check-mkdocs-task.yml @@ -1,10 +1,6 @@ # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/check-mkdocs-task.md name: Check Website -env: - # See: https://github.com/actions/setup-python/tree/main#available-versions-of-python - PYTHON_VERSION: "3.9" - # See: https://docs.github.com/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows on: create: @@ -69,7 +65,7 @@ jobs: - name: Install Python uses: actions/setup-python@v5 with: - python-version: ${{ env.PYTHON_VERSION }} + python-version-file: pyproject.toml - name: Install Poetry run: pip install poetry diff --git a/workflow-templates/check-python-task.yml b/workflow-templates/check-python-task.yml index 1dc0313e..b1adb31d 100644 --- a/workflow-templates/check-python-task.yml +++ b/workflow-templates/check-python-task.yml @@ -1,10 +1,6 @@ # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/check-python-task.md name: Check Python -env: - # See: https://github.com/actions/setup-python/tree/main#available-versions-of-python - PYTHON_VERSION: "3.9" - # See: https://docs.github.com/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows on: create: @@ -73,7 +69,7 @@ jobs: - name: Install Python uses: actions/setup-python@v5 with: - python-version: ${{ env.PYTHON_VERSION }} + python-version-file: pyproject.toml - name: Install Poetry run: pip install poetry @@ -104,7 +100,7 @@ jobs: - name: Install Python uses: actions/setup-python@v5 with: - python-version: ${{ env.PYTHON_VERSION }} + python-version-file: pyproject.toml - name: Install Poetry run: pip install poetry diff --git a/workflow-templates/check-yaml-task.yml b/workflow-templates/check-yaml-task.yml index 9f580dfd..72a6ea0a 100644 --- a/workflow-templates/check-yaml-task.yml +++ b/workflow-templates/check-yaml-task.yml @@ -1,10 +1,6 @@ # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/check-yaml-task.md name: Check YAML -env: - # See: https://github.com/actions/setup-python/tree/main#available-versions-of-python - PYTHON_VERSION: "3.9" - # See: https://docs.github.com/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows on: create: @@ -101,7 +97,7 @@ jobs: - name: Install Python uses: actions/setup-python@v5 with: - python-version: ${{ env.PYTHON_VERSION }} + python-version-file: pyproject.toml - name: Install Poetry run: pip install poetry diff --git a/workflow-templates/deploy-cobra-mkdocs-versioned-poetry.yml b/workflow-templates/deploy-cobra-mkdocs-versioned-poetry.yml index 433a6052..5e024b08 100644 --- a/workflow-templates/deploy-cobra-mkdocs-versioned-poetry.yml +++ b/workflow-templates/deploy-cobra-mkdocs-versioned-poetry.yml @@ -1,10 +1,6 @@ # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/deploy-cobra-mkdocs-versioned-poetry.md name: Deploy Website -env: - # See: https://github.com/actions/setup-python/tree/main#available-versions-of-python - PYTHON_VERSION: "3.9" - on: push: branches: @@ -70,7 +66,7 @@ jobs: - name: Install Python uses: actions/setup-python@v5 with: - python-version: ${{ env.PYTHON_VERSION }} + python-version-file: pyproject.toml - name: Install Poetry run: | diff --git a/workflow-templates/deploy-mkdocs-poetry.yml b/workflow-templates/deploy-mkdocs-poetry.yml index bca5a027..1c691c18 100644 --- a/workflow-templates/deploy-mkdocs-poetry.yml +++ b/workflow-templates/deploy-mkdocs-poetry.yml @@ -1,10 +1,6 @@ # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/deploy-mkdocs-poetry.md name: Deploy Website -env: - # See: https://github.com/actions/setup-python/tree/main#available-versions-of-python - PYTHON_VERSION: "3.9" - # See: https://docs.github.com/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows on: push: @@ -33,7 +29,7 @@ jobs: - name: Install Python uses: actions/setup-python@v5 with: - python-version: ${{ env.PYTHON_VERSION }} + python-version-file: pyproject.toml - name: Install Poetry run: pip install poetry diff --git a/workflow-templates/deploy-mkdocs-versioned-poetry.yml b/workflow-templates/deploy-mkdocs-versioned-poetry.yml index 76664ef1..9ff19787 100644 --- a/workflow-templates/deploy-mkdocs-versioned-poetry.yml +++ b/workflow-templates/deploy-mkdocs-versioned-poetry.yml @@ -1,10 +1,6 @@ # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/deploy-mkdocs-versioned-poetry.md name: Deploy Website -env: - # See: https://github.com/actions/setup-python/tree/main#available-versions-of-python - PYTHON_VERSION: "3.9" - on: push: branches: @@ -60,7 +56,7 @@ jobs: - name: Install Python uses: actions/setup-python@v5 with: - python-version: ${{ env.PYTHON_VERSION }} + python-version-file: pyproject.toml - name: Install Poetry run: | diff --git a/workflow-templates/spell-check-task.yml b/workflow-templates/spell-check-task.yml index e00c3088..e9edba9f 100644 --- a/workflow-templates/spell-check-task.yml +++ b/workflow-templates/spell-check-task.yml @@ -1,10 +1,6 @@ # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/spell-check-task.md name: Spell Check -env: - # See: https://github.com/actions/setup-python/tree/main#available-versions-of-python - PYTHON_VERSION: "3.9" - # See: https://docs.github.com/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows on: create: @@ -55,7 +51,7 @@ jobs: - name: Install Python uses: actions/setup-python@v5 with: - python-version: ${{ env.PYTHON_VERSION }} + python-version-file: pyproject.toml - name: Install Poetry run: pip install poetry diff --git a/workflow-templates/test-go-integration-task.yml b/workflow-templates/test-go-integration-task.yml index c61e8456..c7ca4609 100644 --- a/workflow-templates/test-go-integration-task.yml +++ b/workflow-templates/test-go-integration-task.yml @@ -1,10 +1,6 @@ # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/test-go-integration-task.md name: Test Integration -env: - # See: https://github.com/actions/setup-python/tree/main#available-versions-of-python - PYTHON_VERSION: "3.9" - # See: https://docs.github.com/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows on: create: @@ -86,7 +82,7 @@ jobs: - name: Install Python uses: actions/setup-python@v5 with: - python-version: ${{ env.PYTHON_VERSION }} + python-version-file: pyproject.toml - name: Install Poetry run: pip install poetry diff --git a/workflow-templates/test-python-poetry-task.yml b/workflow-templates/test-python-poetry-task.yml index a39925e3..f34c8ced 100644 --- a/workflow-templates/test-python-poetry-task.yml +++ b/workflow-templates/test-python-poetry-task.yml @@ -1,10 +1,6 @@ # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/test-python-poetry-task.md name: Test Python -env: - # See: https://github.com/actions/setup-python/tree/main#available-versions-of-python - PYTHON_VERSION: "3.9" - # See: https://docs.github.com/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows on: create: @@ -69,7 +65,7 @@ jobs: - name: Install Python uses: actions/setup-python@v5 with: - python-version: ${{ env.PYTHON_VERSION }} + python-version-file: pyproject.toml - name: Install Poetry run: pip install poetry From 55603701bca2d2f3bd31d71ffb59753071173124 Mon Sep 17 00:00:00 2001 From: per1234 Date: Tue, 17 Jun 2025 16:33:00 -0700 Subject: [PATCH 2/2] Set upper limit for project Python version The version of Python used by the project infrastructure is controlled via the `pyproject.toml` metadata file. Previously the file specified that any version >=3.9.0 and <4.0.0 could be used, since it had been validated with 3.9 and theoretically no breaking changes should be introduced without a major version bump. However, there was a breaking change in Python version 3.10, which caused an incompatibility with the version of the project's `pyyaml` Python package dependency. This caused the `poetry install` command to fail when a version of Python greater than 3.9.x was used: ``` PEP517 build of a dependency failed Backend subprocess exited when trying to invoke get_requires_for_build_wheel | Command '['/tmp/tmpu92tgtph/.venv/bin/python', '/opt/hostedtoolcache/Python/3.13.4/x64/lib/python3.13/site-packages/pyproject_hooks/_in_process/_in_process.py', 'get_requires_for_build_wheel', '/tmp/tmpt2syl665']' returned non-zero exit status 1. | | /tmp/tmpu92tgtph/.venv/lib/python3.13/site-packages/setuptools/dist.py:759: SetuptoolsDeprecationWarning: License classifiers are deprecated. | !! | | ******************************************************************************** | Please consider removing the following classifiers in favor of a SPDX license expression: | | License :: OSI Approved :: MIT License | | See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. | ******************************************************************************** | | !! | self._finalize_license_expression() | running egg_info | writing lib3/PyYAML.egg-info/PKG-INFO | writing dependency_links to lib3/PyYAML.egg-info/dependency_links.txt | writing top-level names to lib3/PyYAML.egg-info/top_level.txt | Traceback (most recent call last): | File "/opt/hostedtoolcache/Python/3.13.4/x64/lib/python3.13/site-packages/pyproject_hooks/_in_process/_in_process.py", line 389, in | main() | ~~~~^^ | File "/opt/hostedtoolcache/Python/3.13.4/x64/lib/python3.13/site-packages/pyproject_hooks/_in_process/_in_process.py", line 373, in main | json_out["return_val"] = hook(**hook_input["kwargs"]) | ~~~~^^^^^^^^^^^^^^^^^^^^^^^^ | File "/opt/hostedtoolcache/Python/3.13.4/x64/lib/python3.13/site-packages/pyproject_hooks/_in_process/_in_process.py", line 143, in get_requires_for_build_wheel | return hook(config_settings) | File "/tmp/tmpu92tgtph/.venv/lib/python3.13/site-packages/setuptools/build_meta.py", line 331, in get_requires_for_build_wheel | return self._get_build_requires(config_settings, requirements=[]) | ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | File "/tmp/tmpu92tgtph/.venv/lib/python3.13/site-packages/setuptools/build_meta.py", line 301, in _get_build_requires | self.run_setup() | ~~~~~~~~~~~~~~^^ | File "/tmp/tmpu92tgtph/.venv/lib/python3.13/site-packages/setuptools/build_meta.py", line 317, in run_setup | exec(code, locals()) | ~~~~^^^^^^^^^^^^^^^^ | File "", line 271, in | File "/tmp/tmpu92tgtph/.venv/lib/python3.13/site-packages/setuptools/__init__.py", line 115, in setup | return distutils.core.setup(**attrs) | ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^ | File "/tmp/tmpu92tgtph/.venv/lib/python3.13/site-packages/setuptools/_distutils/core.py", line 186, in setup | return run_commands(dist) | File "/tmp/tmpu92tgtph/.venv/lib/python3.13/site-packages/setuptools/_distutils/core.py", line 202, in run_commands | dist.run_commands() | ~~~~~~~~~~~~~~~~~^^ | File "/tmp/tmpu92tgtph/.venv/lib/python3.13/site-packages/setuptools/_distutils/dist.py", line 1002, in run_commands | self.run_command(cmd) | ~~~~~~~~~~~~~~~~^^^^^ | File "/tmp/tmpu92tgtph/.venv/lib/python3.13/site-packages/setuptools/dist.py", line 1102, in run_command | super().run_command(command) | ~~~~~~~~~~~~~~~~~~~^^^^^^^^^ | File "/tmp/tmpu92tgtph/.venv/lib/python3.13/site-packages/setuptools/_distutils/dist.py", line 1021, in run_command | cmd_obj.run() | ~~~~~~~~~~~^^ | File "/tmp/tmpu92tgtph/.venv/lib/python3.13/site-packages/setuptools/command/egg_info.py", line 312, in run | self.find_sources() | ~~~~~~~~~~~~~~~~~^^ | File "/tmp/tmpu92tgtph/.venv/lib/python3.13/site-packages/setuptools/command/egg_info.py", line 320, in find_sources | mm.run() | ~~~~~~^^ | File "/tmp/tmpu92tgtph/.venv/lib/python3.13/site-packages/setuptools/command/egg_info.py", line 543, in run | self.add_defaults() | ~~~~~~~~~~~~~~~~~^^ | File "/tmp/tmpu92tgtph/.venv/lib/python3.13/site-packages/setuptools/command/egg_info.py", line 581, in add_defaults | sdist.add_defaults(self) | ~~~~~~~~~~~~~~~~~~^^^^^^ | File "/tmp/tmpu92tgtph/.venv/lib/python3.13/site-packages/setuptools/command/sdist.py", line 109, in add_defaults | super().add_defaults() | ~~~~~~~~~~~~~~~~~~~~^^ | File "/tmp/tmpu92tgtph/.venv/lib/python3.13/site-packages/setuptools/_distutils/command/sdist.py", line 245, in add_defaults | self._add_defaults_ext() | ~~~~~~~~~~~~~~~~~~~~~~^^ | File "/tmp/tmpu92tgtph/.venv/lib/python3.13/site-packages/setuptools/_distutils/command/sdist.py", line 330, in _add_defaults_ext | self.filelist.extend(build_ext.get_source_files()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~^^ | File "", line 201, in get_source_files | File "/tmp/tmpu92tgtph/.venv/lib/python3.13/site-packages/setuptools/_distutils/cmd.py", line 131, in __getattr__ | raise AttributeError(attr) | AttributeError: cython_sources Note: This error originates from the build backend, and is likely not a problem with poetry but one of the following issues with pyyaml (5.4.1) - not supporting PEP 517 builds - not specifying PEP 517 build requirements correctly - the build requirements are incompatible with your operating system or Python version - the build requirements are missing system dependencies (eg: compilers, libraries, headers). You can verify this by running pip wheel --no-cache-dir --use-pep517 "pyyaml (==5.4.1)". exit status 1 ``` Although the incompatibility has already been fixed in `pyyaml`, this is a transitive dependency and so it might be difficult to update the version used by the project. So the chosen solution is to adjust the Python version constraints to require a version less than 3.10.0 be used. This will still allow use of any Python version in the 3.9.x series to make the infrastructure more friendly to local use by contributors, while ensuring that a compatible version is used. --- poetry.lock | 7 ++----- pyproject.toml | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index 0368e29f..119afbce 100644 --- a/poetry.lock +++ b/poetry.lock @@ -100,7 +100,6 @@ description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" groups = ["dev"] -markers = "python_version < \"3.11\"" files = [ {file = "exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10"}, {file = "exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88"}, @@ -391,7 +390,6 @@ description = "A lil' TOML parser" optional = false python-versions = ">=3.7" groups = ["dev"] -markers = "python_version < \"3.11\"" files = [ {file = "tomli-2.0.0-py3-none-any.whl", hash = "sha256:b5bde28da1fed24b9bd1d4d2b8cba62300bfb4ec9a6187a957e8ddb9434c5224"}, {file = "tomli-2.0.0.tar.gz", hash = "sha256:c292c34f58502a1eb2bbb9f5bbc9a5ebc37bee10ffb8c2d6bbdfa8eb13cc14e1"}, @@ -404,7 +402,6 @@ description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" groups = ["dev"] -markers = "python_version < \"3.11\"" files = [ {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, @@ -431,5 +428,5 @@ dev = ["doc8", "flake8", "flake8-import-order", "rstcheck[sphinx]", "sphinx"] [metadata] lock-version = "2.1" -python-versions = "^3.9" -content-hash = "d683b916a87ca20107ddb69a05b8e5d78a2dbbb8e342aae955e8ed1bbdfaabdc" +python-versions = "~3.9" +content-hash = "41464f92abb16591cbdd69caa9b4528d1758922ed2c104e6b0b239f60ecab8b3" diff --git a/pyproject.toml b/pyproject.toml index 6150bfeb..192dfe05 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,7 @@ description = "" authors = ["Arduino "] [tool.poetry.dependencies] -python = "^3.9" +python = "~3.9" [tool.poetry.dev-dependencies] yamllint = "^v1.37.1"