feat: Use pyproject standardized dependency-groups (#6689)

* Use pyproject standardized dependency-groups

* fix: update Python version requirement to support up to 3.14

---------

Co-authored-by: Gabriel Luiz Freitas Almeida <gabriel@langflow.org>
This commit is contained in:
Christophe Bornet 2025-02-20 21:19:45 +01:00 committed by GitHub
commit 0886bdad16
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 141 additions and 146 deletions

View file

@ -34,7 +34,7 @@ jobs:
with:
python-version: ${{ matrix.python-version }}
- name: Install the project
run: uv sync --dev
run: uv sync
- name: Run Mypy
run: |
uv run mypy --namespace-packages -p "langflow"

View file

@ -31,7 +31,7 @@ jobs:
- name: "Setup Environment"
uses: ./.github/actions/setup-uv
- name: Install the project
run: uv sync --dev
run: uv sync
- name: Generate main nightly tag
id: generate_main_tag

View file

@ -30,7 +30,7 @@ jobs:
- name: "Install dependencies"
run: |
uv sync --frozen
uv sync
uv pip install -e .
- name: Run starter projects update

View file

@ -54,7 +54,7 @@ jobs:
with:
python-version: ${{ matrix.python-version }}
- name: Install the project
run: uv sync --dev
run: uv sync
- name: Run unit tests
uses: nick-fields/retry@v3
with:
@ -78,7 +78,7 @@ jobs:
with:
python-version: ${{ matrix.python-version }}
- name: Install the project
run: uv sync --dev
run: uv sync
- name: Run integration tests
run: make integration_tests_no_api_keys
- name: Minimize uv cache

View file

@ -65,7 +65,7 @@ jobs:
- name: Setup Environment
uses: ./.github/actions/setup-uv
- name: Install the project
run: uv sync --dev
run: uv sync
- name: Check Version
id: check-version
run: |
@ -129,7 +129,7 @@ jobs:
- name: Setup Environment
uses: ./.github/actions/setup-uv
- name: Install the project
run: uv sync --dev
run: uv sync
# If pre-release is true, we need to check if ["a", "b", "rc", "dev", "post"] is in the version string
# if the version string is incorrect, we need to exit the workflow

View file

@ -75,7 +75,7 @@ jobs:
- name: "Setup Environment"
uses: ./.github/actions/setup-uv
- name: Install the project
run: uv sync --dev
run: uv sync
- name: Verify Nightly Name and Version
id: verify
@ -152,7 +152,7 @@ jobs:
- name: "Setup Environment"
uses: ./.github/actions/setup-uv
- name: Install the project
run: uv sync --dev
run: uv sync
- name: Verify Nightly Name and Version
id: verify

View file

@ -26,7 +26,7 @@ jobs:
- name: "Setup Environment"
uses: ./.github/actions/setup-uv
- name: Install the project
run: uv sync --dev
run: uv sync
- name: Run unit tests
id: run_tests
continue-on-error: true

View file

@ -262,7 +262,7 @@ jobs:
uses: ./.github/actions/setup-uv
- name: Install Python Dependencies
run: uv sync --dev
run: uv sync
- name: Configure Environment Variables
run: |

View file

@ -101,7 +101,7 @@ Pre-commit hooks will help keep your changes clean and well-formatted.
Install pre-commit hooks by running the following commands:
```bash
uv sync --dev
uv sync
uv run pre-commit install
```

View file

@ -115,54 +115,8 @@ dependencies = [
"apify-client>=1.8.1",
]
[tool.uv.sources]
langflow-base = { workspace = true }
langflow = { workspace = true }
[tool.uv.workspace]
members = ["src/backend/base", "."]
[tool.hatch.build.targets.wheel]
packages = ["src/backend/langflow"]
[project.urls]
Repository = "https://github.com/langflow-ai/langflow"
Documentation = "https://docs.langflow.org"
[project.optional-dependencies]
deploy = [
"celery[redis]>=5.3.6",
"flower>=2.0.0"
]
couchbase = [
"couchbase>=4.2.1"
]
cassio = [
"cassio>=0.1.7"
]
local = [
"llama-cpp-python~=0.2.0",
"sentence-transformers>=2.3.1",
"ctransformers>=0.2.10"
]
clickhouse-connect = [
"clickhouse-connect==0.7.19"
]
nv-ingest = [
# nv-ingest-client 2025.2.7.dev0 does not correctly install its
# dependencies, so we need to install some manually.
"nv-ingest-client==2025.2.7.dev0",
"python-pptx==0.6.23",
"pymilvus[bulk_writer,model]==2.5.0",
"llama-index-embeddings-nvidia==0.1.5",
]
[project.scripts]
langflow = "langflow.__main__:main"
[tool.uv]
dev-dependencies = [
[dependency-groups]
dev = [
"pytest-instafail>=0.5.0",
"types-redis>=4.6.0.5",
"ipykernel>=6.29.0",
@ -203,6 +157,52 @@ dev-dependencies = [
"locust>=2.32.9",
]
[tool.uv.sources]
langflow-base = { workspace = true }
langflow = { workspace = true }
[tool.uv.workspace]
members = ["src/backend/base", "."]
[tool.hatch.build.targets.wheel]
packages = ["src/backend/langflow"]
[project.urls]
Repository = "https://github.com/langflow-ai/langflow"
Documentation = "https://docs.langflow.org"
[project.optional-dependencies]
deploy = [
"celery[redis]>=5.3.6",
"flower>=2.0.0"
]
couchbase = [
"couchbase>=4.2.1"
]
cassio = [
"cassio>=0.1.7"
]
local = [
"llama-cpp-python~=0.2.0",
"sentence-transformers>=2.3.1",
"ctransformers>=0.2.10"
]
clickhouse-connect = [
"clickhouse-connect==0.7.19"
]
nv-ingest = [
# nv-ingest-client 2025.2.7.dev0 does not correctly install its
# dependencies, so we need to install some manually.
"nv-ingest-client==2025.2.7.dev0",
"python-pptx==0.6.23",
"pymilvus[bulk_writer,model]==2.5.0",
"llama-index-embeddings-nvidia==0.1.5",
]
[project.scripts]
langflow = "langflow.__main__:main"
[tool.codespell]
skip = '.git,*.pdf,*.svg,*.pdf,*.yaml,*.ipynb,poetry.lock,*.min.js,*.css,package-lock.json,*.trig.,**/node_modules/**,./stuff/*,*.csv'

View file

@ -83,6 +83,45 @@ dependencies = [
"greenlet>=3.1.1",
]
[dependency-groups]
dev = [
"asgi-lifespan>=2.1.0",
"pytest-codspeed>=3.0.0",
"pytest-github-actions-annotate-failures>=0.2.0",
"types-aiofiles>=24.1.0.20240626",
"types-redis>=4.6.0.5",
"ipykernel>=6.29.0",
"mypy>=1.11.0",
"ruff>=0.6.2",
"httpx[http2]>=0.27",
"pytest>=8.2.0",
"types-requests>=2.32.0",
"requests>=2.32.0",
"pytest-cov>=5.0.0",
"pandas-stubs>=2.1.4.231227",
"types-pillow>=10.2.0.20240213",
"types-pyyaml>=6.0.12.8",
"types-python-jose>=3.3.4.8",
"types-passlib>=1.7.7.13",
"pytest-mock>=3.14.0",
"pytest-xdist>=3.6.0",
"types-pywin32>=306.0.0.4",
"types-google-cloud-ndb>=2.2.0.0",
"pytest-sugar>=1.0.0",
"respx>=0.21.1",
"pytest-instafail>=0.5.0",
"pytest-asyncio>=0.23.0",
"pytest-profiling>=1.7.0",
"pre-commit>=3.7.0",
"vulture>=2.11",
"dictdiffer>=0.9.0",
"pytest-split>=0.9.0",
"devtools>=0.12.2",
"pytest-flakefinder>=1.1.0",
"types-markdown>=3.7.0.20240822",
"codeflash>=0.8.4"
]
[tool.hatch.build.targets.wheel]
packages = ["langflow"]
@ -158,13 +197,6 @@ ignore = [
"S301", # Use of pickle
]
[tool.uv]
dev-dependencies = [
"asgi-lifespan>=2.1.0",
"pytest-codspeed>=3.0.0",
"pytest-github-actions-annotate-failures>=0.2.0",
"types-aiofiles>=24.1.0.20240626",
]
[tool.codeflash]
# All paths are relative to this pyproject.toml's directory.
module-root = "langflow"
@ -208,40 +240,5 @@ all = [
"ctransformers>=0.2"
]
# Development dependencies
dev = [
"types-redis>=4.6.0.5",
"ipykernel>=6.29.0",
"mypy>=1.11.0",
"ruff>=0.6.2",
"httpx[http2]>=0.27",
"pytest>=8.2.0",
"types-requests>=2.32.0",
"requests>=2.32.0",
"pytest-cov>=5.0.0",
"pandas-stubs>=2.1.4.231227",
"types-pillow>=10.2.0.20240213",
"types-pyyaml>=6.0.12.8",
"types-python-jose>=3.3.4.8",
"types-passlib>=1.7.7.13",
"pytest-mock>=3.14.0",
"pytest-xdist>=3.6.0",
"types-pywin32>=306.0.0.4",
"types-google-cloud-ndb>=2.2.0.0",
"pytest-sugar>=1.0.0",
"respx>=0.21.1",
"pytest-instafail>=0.5.0",
"pytest-asyncio>=0.23.0",
"pytest-profiling>=1.7.0",
"pre-commit>=3.7.0",
"vulture>=2.11",
"dictdiffer>=0.9.0",
"pytest-split>=0.9.0",
"devtools>=0.12.2",
"pytest-flakefinder>=1.1.0",
"types-markdown>=3.7.0.20240822",
"codeflash>=0.8.4"
]
[project.scripts]
langflow-base = "langflow.__main__:main"

86
uv.lock generated
View file

@ -4640,7 +4640,15 @@ deploy = [
{ name = "flower" },
{ name = "redis" },
]
local = [
{ name = "ctransformers" },
{ name = "llama-cpp-python" },
{ name = "sentence-transformers" },
]
[package.dev-dependencies]
dev = [
{ name = "asgi-lifespan" },
{ name = "codeflash" },
{ name = "devtools" },
{ name = "dictdiffer" },
@ -4651,8 +4659,10 @@ dev = [
{ name = "pre-commit" },
{ name = "pytest" },
{ name = "pytest-asyncio" },
{ name = "pytest-codspeed" },
{ name = "pytest-cov" },
{ name = "pytest-flakefinder" },
{ name = "pytest-github-actions-annotate-failures" },
{ name = "pytest-instafail" },
{ name = "pytest-mock" },
{ name = "pytest-profiling" },
@ -4662,6 +4672,7 @@ dev = [
{ name = "requests" },
{ name = "respx" },
{ name = "ruff" },
{ name = "types-aiofiles" },
{ name = "types-google-cloud-ndb" },
{ name = "types-markdown" },
{ name = "types-passlib" },
@ -4673,19 +4684,6 @@ dev = [
{ name = "types-requests" },
{ name = "vulture" },
]
local = [
{ name = "ctransformers" },
{ name = "llama-cpp-python" },
{ name = "sentence-transformers" },
]
[package.dev-dependencies]
dev = [
{ name = "asgi-lifespan" },
{ name = "pytest-codspeed" },
{ name = "pytest-github-actions-annotate-failures" },
{ name = "types-aiofiles" },
]
[package.metadata]
requires-dist = [
@ -4701,13 +4699,10 @@ requires-dist = [
{ name = "celery", marker = "extra == 'deploy'", specifier = ">=5.3.1" },
{ name = "chardet", specifier = ">=5.2.0,<6.0.0" },
{ name = "clickhouse-connect", specifier = "==0.7.19" },
{ name = "codeflash", marker = "extra == 'dev'", specifier = ">=0.8.4" },
{ name = "cryptography", specifier = ">=42.0.5,<44.0.0" },
{ name = "ctransformers", marker = "extra == 'all'", specifier = ">=0.2" },
{ name = "ctransformers", marker = "extra == 'local'", specifier = ">=0.2" },
{ name = "defusedxml", specifier = ">=0.7.1,<1.0.0" },
{ name = "devtools", marker = "extra == 'dev'", specifier = ">=0.12.2" },
{ name = "dictdiffer", marker = "extra == 'dev'", specifier = ">=0.9.0" },
{ name = "diskcache", specifier = ">=5.6.3,<6.0.0" },
{ name = "docstring-parser", specifier = ">=0.16,<1.0.0" },
{ name = "duckdb", specifier = ">=1.0.0,<2.0.0" },
@ -4722,8 +4717,6 @@ requires-dist = [
{ name = "greenlet", specifier = ">=3.1.1" },
{ name = "gunicorn", specifier = ">=22.0.0,<24.0.0" },
{ name = "httpx", extras = ["http2"], specifier = ">=0.27,<1.0.0" },
{ name = "httpx", extras = ["http2"], marker = "extra == 'dev'", specifier = ">=0.27" },
{ name = "ipykernel", marker = "extra == 'dev'", specifier = ">=6.29.0" },
{ name = "jq", marker = "sys_platform != 'win32'", specifier = ">=1.7.0,<2.0.0" },
{ name = "json-repair", specifier = ">=0.30.3" },
{ name = "langchain", specifier = "~=0.3.10" },
@ -4736,7 +4729,6 @@ requires-dist = [
{ name = "loguru", specifier = ">=0.7.1,<1.0.0" },
{ name = "mcp", specifier = ">=1.1.2" },
{ name = "multiprocess", specifier = ">=0.70.14,<1.0.0" },
{ name = "mypy", marker = "extra == 'dev'", specifier = ">=1.11.0" },
{ name = "nanoid", specifier = ">=2.0.0,<3.0.0" },
{ name = "nest-asyncio", specifier = ">=1.6.0,<2.0.0" },
{ name = "networkx", specifier = ">=3.4.2" },
@ -4746,35 +4738,20 @@ requires-dist = [
{ name = "opentelemetry-sdk", specifier = ">=1.25.0,<2.0.0" },
{ name = "orjson", specifier = "==3.10.15" },
{ name = "pandas", specifier = "==2.2.3" },
{ name = "pandas-stubs", marker = "extra == 'dev'", specifier = ">=2.1.4.231227" },
{ name = "passlib", specifier = ">=1.7.4,<2.0.0" },
{ name = "pillow", specifier = ">=11.1.0,<12.0.0" },
{ name = "platformdirs", specifier = ">=4.2.0,<5.0.0" },
{ name = "pre-commit", marker = "extra == 'dev'", specifier = ">=3.7.0" },
{ name = "prometheus-client", specifier = ">=0.20.0,<1.0.0" },
{ name = "pydantic", specifier = "~=2.10.1" },
{ name = "pydantic-settings", specifier = ">=2.2.0,<3.0.0" },
{ name = "pypdf", specifier = "~=5.1.0" },
{ name = "pyperclip", specifier = ">=1.8.2,<2.0.0" },
{ name = "pytest", marker = "extra == 'dev'", specifier = ">=8.2.0" },
{ name = "pytest-asyncio", marker = "extra == 'dev'", specifier = ">=0.23.0" },
{ name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=5.0.0" },
{ name = "pytest-flakefinder", marker = "extra == 'dev'", specifier = ">=1.1.0" },
{ name = "pytest-instafail", marker = "extra == 'dev'", specifier = ">=0.5.0" },
{ name = "pytest-mock", marker = "extra == 'dev'", specifier = ">=3.14.0" },
{ name = "pytest-profiling", marker = "extra == 'dev'", specifier = ">=1.7.0" },
{ name = "pytest-split", marker = "extra == 'dev'", specifier = ">=0.9.0" },
{ name = "pytest-sugar", marker = "extra == 'dev'", specifier = ">=1.0.0" },
{ name = "pytest-xdist", marker = "extra == 'dev'", specifier = ">=3.6.0" },
{ name = "python-docx", specifier = ">=1.1.0,<2.0.0" },
{ name = "python-jose", specifier = ">=3.3.0,<4.0.0" },
{ name = "python-multipart", specifier = ">=0.0.12,<1.0.0" },
{ name = "redis", marker = "extra == 'all'", specifier = ">=4.6.0" },
{ name = "redis", marker = "extra == 'deploy'", specifier = ">=4.6.0" },
{ name = "requests", marker = "extra == 'dev'", specifier = ">=2.32.0" },
{ name = "respx", marker = "extra == 'dev'", specifier = ">=0.21.1" },
{ name = "rich", specifier = ">=13.7.0,<14.0.0" },
{ name = "ruff", marker = "extra == 'dev'", specifier = ">=0.6.2" },
{ name = "sentence-transformers", marker = "extra == 'all'", specifier = ">=2.0.0" },
{ name = "sentence-transformers", marker = "extra == 'local'", specifier = ">=2.0.0" },
{ name = "sentry-sdk", extras = ["fastapi", "loguru"], specifier = ">=2.5.1,<3.0.0" },
@ -4782,27 +4759,48 @@ requires-dist = [
{ name = "spider-client", specifier = ">=0.0.27,<1.0.0" },
{ name = "sqlmodel", specifier = "==0.0.22" },
{ name = "typer", specifier = ">=0.13.0,<1.0.0" },
{ name = "types-google-cloud-ndb", marker = "extra == 'dev'", specifier = ">=2.2.0.0" },
{ name = "types-markdown", marker = "extra == 'dev'", specifier = ">=3.7.0.20240822" },
{ name = "types-passlib", marker = "extra == 'dev'", specifier = ">=1.7.7.13" },
{ name = "types-pillow", marker = "extra == 'dev'", specifier = ">=10.2.0.20240213" },
{ name = "types-python-jose", marker = "extra == 'dev'", specifier = ">=3.3.4.8" },
{ name = "types-pywin32", marker = "extra == 'dev'", specifier = ">=306.0.0.4" },
{ name = "types-pyyaml", marker = "extra == 'dev'", specifier = ">=6.0.12.8" },
{ name = "types-redis", marker = "extra == 'dev'", specifier = ">=4.6.0.5" },
{ name = "types-requests", marker = "extra == 'dev'", specifier = ">=2.32.0" },
{ name = "uncurl", specifier = ">=0.0.11,<1.0.0" },
{ name = "uvicorn", specifier = ">=0.30.0,<1.0.0" },
{ name = "validators", specifier = ">=0.34.0" },
{ name = "vulture", marker = "extra == 'dev'", specifier = ">=2.11" },
]
[package.metadata.requires-dev]
dev = [
{ name = "asgi-lifespan", specifier = ">=2.1.0" },
{ name = "codeflash", specifier = ">=0.8.4" },
{ name = "devtools", specifier = ">=0.12.2" },
{ name = "dictdiffer", specifier = ">=0.9.0" },
{ name = "httpx", extras = ["http2"], specifier = ">=0.27" },
{ name = "ipykernel", specifier = ">=6.29.0" },
{ name = "mypy", specifier = ">=1.11.0" },
{ name = "pandas-stubs", specifier = ">=2.1.4.231227" },
{ name = "pre-commit", specifier = ">=3.7.0" },
{ name = "pytest", specifier = ">=8.2.0" },
{ name = "pytest-asyncio", specifier = ">=0.23.0" },
{ name = "pytest-codspeed", specifier = ">=3.0.0" },
{ name = "pytest-cov", specifier = ">=5.0.0" },
{ name = "pytest-flakefinder", specifier = ">=1.1.0" },
{ name = "pytest-github-actions-annotate-failures", specifier = ">=0.2.0" },
{ name = "pytest-instafail", specifier = ">=0.5.0" },
{ name = "pytest-mock", specifier = ">=3.14.0" },
{ name = "pytest-profiling", specifier = ">=1.7.0" },
{ name = "pytest-split", specifier = ">=0.9.0" },
{ name = "pytest-sugar", specifier = ">=1.0.0" },
{ name = "pytest-xdist", specifier = ">=3.6.0" },
{ name = "requests", specifier = ">=2.32.0" },
{ name = "respx", specifier = ">=0.21.1" },
{ name = "ruff", specifier = ">=0.6.2" },
{ name = "types-aiofiles", specifier = ">=24.1.0.20240626" },
{ name = "types-google-cloud-ndb", specifier = ">=2.2.0.0" },
{ name = "types-markdown", specifier = ">=3.7.0.20240822" },
{ name = "types-passlib", specifier = ">=1.7.7.13" },
{ name = "types-pillow", specifier = ">=10.2.0.20240213" },
{ name = "types-python-jose", specifier = ">=3.3.4.8" },
{ name = "types-pywin32", specifier = ">=306.0.0.4" },
{ name = "types-pyyaml", specifier = ">=6.0.12.8" },
{ name = "types-redis", specifier = ">=4.6.0.5" },
{ name = "types-requests", specifier = ">=2.32.0" },
{ name = "vulture", specifier = ">=2.11" },
]
[[package]]