From 9abc68b309adbe0da4117f5b96621d091f26451a Mon Sep 17 00:00:00 2001 From: td3447 <59424730+td3447@users.noreply.github.com> Date: Sat, 21 Mar 2026 13:56:36 -0400 Subject: [PATCH 1/3] fix(flet-cli): correct dependency parsing (#6332) Closes issue: #6332 - Adds a space (' ') in front of dependencies in `pyproject.toml` that have version constraints starting with `<` or `<=`. - Fixes the issue where `flet build` would give a `The system cannot find the file specified.` error. --- .../src/flet_cli/utils/project_dependencies.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/sdk/python/packages/flet-cli/src/flet_cli/utils/project_dependencies.py b/sdk/python/packages/flet-cli/src/flet_cli/utils/project_dependencies.py index 2cae6d72d0..35e356f94f 100644 --- a/sdk/python/packages/flet-cli/src/flet_cli/utils/project_dependencies.py +++ b/sdk/python/packages/flet-cli/src/flet_cli/utils/project_dependencies.py @@ -128,6 +128,15 @@ def get_project_dependencies( if project_dependencies is None: return None - dependencies = set(project_dependencies) + dependencies: set[str] = set() + + for dep in project_dependencies: + for sep in ("<=", "<"): + if sep in dep and "," not in dep: + value, _, suffix = dep.partition(sep) + dependencies.add(f"{value} {sep}{suffix}") + break + else: + dependencies.add(dep.strip()) return sorted(dependencies) From e1a6d1ef4f605ea13c4f666b42ae13b9a9fe21f8 Mon Sep 17 00:00:00 2001 From: td3447 <59424730+td3447@users.noreply.github.com> Date: Sat, 21 Mar 2026 17:46:09 -0400 Subject: [PATCH 2/3] fix(flet-cli): correct dependency parsing - poetry (#6332) - Fixed parsing issue for dependencies in [tool.poetry.dependencies] - Adds single space ' ' to the front of the `<` or `<=` to prevent `The system cannot find the file specified.` error. --- .../flet-cli/src/flet_cli/utils/project_dependencies.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sdk/python/packages/flet-cli/src/flet_cli/utils/project_dependencies.py b/sdk/python/packages/flet-cli/src/flet_cli/utils/project_dependencies.py index 35e356f94f..404ad9dffe 100644 --- a/sdk/python/packages/flet-cli/src/flet_cli/utils/project_dependencies.py +++ b/sdk/python/packages/flet-cli/src/flet_cli/utils/project_dependencies.py @@ -97,7 +97,10 @@ def format_dependency_version(dependency_name: str, dependency_value: Any): sep = "~=" value = value[1:] return f"{dependency_name}~={value[1:]}" - elif "<" in value or ">" in value: + elif "<=" in value or "<" in value: + sep = " " + value = value.replace(" ", "") + elif ">" in value: sep = "" value = value.replace(" ", "") From d20311afd8039bfb5e93d8be71f85b38f2fb61e3 Mon Sep 17 00:00:00 2001 From: td3447 <59424730+td3447@users.noreply.github.com> Date: Tue, 24 Mar 2026 22:15:53 -0400 Subject: [PATCH 3/3] fix(flet-cli): correct dependency parsing - Fixed an error where a `<` after a `,` was not recognized as a dependency. - Added more checks to ensure a wider variety of typos are covered. - Fixed an issue where using a `*` wouldn't correctly look for any version and raise an error. - Fixed an issue where using a `!` after a `,` would raise an error, since it was missing the required ` ` in front. - Ensured the correct separators were added for all the types of requirements I could think of - Added support for clearing whitespace from uv dependencies, in the same way used with the poetry dependencies. - Tests were conducted on both poetry and uv, using `flet build` --- .../flet_cli/utils/project_dependencies.py | 35 +++++++++++-------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/sdk/python/packages/flet-cli/src/flet_cli/utils/project_dependencies.py b/sdk/python/packages/flet-cli/src/flet_cli/utils/project_dependencies.py index 404ad9dffe..35df3b3c5c 100644 --- a/sdk/python/packages/flet-cli/src/flet_cli/utils/project_dependencies.py +++ b/sdk/python/packages/flet-cli/src/flet_cli/utils/project_dependencies.py @@ -46,8 +46,7 @@ def format_dependency_version(dependency_name: str, dependency_value: Any): if isinstance(dependency_value, dict): version = dependency_value.get("version") if version: - sep = "==" - value = version + value = version.replace(" ", "") else: git_url = dependency_value.get("git") if git_url: @@ -87,22 +86,27 @@ def format_dependency_version(dependency_name: str, dependency_value: Any): if markers is not None: suffix = f";{markers}" else: - value = dependency_value - sep = "==" + value = dependency_value.replace(" ", "") + sep = "" if value.startswith("^"): sep = ">=" value = value[1:] + elif "*" in value: + sep = "" + value = "" elif value.startswith("~"): - sep = "~=" - value = value[1:] - return f"{dependency_name}~={value[1:]}" - elif "<=" in value or "<" in value: - sep = " " - value = value.replace(" ", "") - elif ">" in value: sep = "" - value = value.replace(" ", "") + if "~=" not in value: + value = value.replace("~", "~=") + elif any(s in value for s in ("!", "<", ">")): + sep = "" + for s in ("!", "<"): + if s in value: + value = value.replace(s, f" {s}") + break + elif value[0].isdigit(): + sep = "==" return f"{dependency_name}{sep}{value}{suffix}" @@ -134,12 +138,13 @@ def get_project_dependencies( dependencies: set[str] = set() for dep in project_dependencies: - for sep in ("<=", "<"): - if sep in dep and "," not in dep: + for sep in ("<=", "<", "!"): + if sep in dep: + dep = dep.replace(" ", "") value, _, suffix = dep.partition(sep) dependencies.add(f"{value} {sep}{suffix}") break else: - dependencies.add(dep.strip()) + dependencies.add(dep.replace(" ", "")) return sorted(dependencies)