diff --git a/poetry/core/semver/helpers.py b/poetry/core/semver/helpers.py index 7d9ca49c4..11c2dfa5d 100644 --- a/poetry/core/semver/helpers.py +++ b/poetry/core/semver/helpers.py @@ -130,6 +130,13 @@ def parse_single_constraint(constraint: str) -> VersionTypes: op = m.group(1) version = m.group(2) + # Technically invalid constraints like `>= 3.*` will appear + # here as `3.`. + # Pip currently supports these and to avoid breaking existing + # users workflows we need to support them as well. To do so, + # we just remove the inconsequential part. + version = version.rstrip(".") + if version == "dev": version = "0.0-dev" diff --git a/tests/version/test_requirements.py b/tests/version/test_requirements.py index 0a8a9bd87..c806d0bfd 100644 --- a/tests/version/test_requirements.py +++ b/tests/version/test_requirements.py @@ -28,6 +28,9 @@ def assert_requirement(req, name, url=None, extras=None, constraint="*", marker= ("name", {"name": "name"}), ("foo-bar.quux_baz", {"name": "foo-bar.quux_baz"}), ("name>=3", {"name": "name", "constraint": ">=3"}), + ("name>=3.*", {"name": "name", "constraint": ">=3.0"}), + ("name<3.*", {"name": "name", "constraint": "<3.0"}), + ("name>3.5.*", {"name": "name", "constraint": ">3.5"}), ("name==1.0.post1", {"name": "name", "constraint": "==1.0.post1"}), ( "name>=1.2.3;python_version=='2.6'",