diff --git a/src/poetry/repositories/http.py b/src/poetry/repositories/http.py
index bbfcb8b5c0f..6c08473e147 100644
--- a/src/poetry/repositories/http.py
+++ b/src/poetry/repositories/http.py
@@ -15,6 +15,7 @@
from poetry.core.packages.dependency import Dependency
from poetry.core.packages.utils.link import Link
+from poetry.core.semver.helpers import parse_constraint
from poetry.core.version.markers import parse_marker
from poetry.repositories.cached import CachedRepository
@@ -148,6 +149,14 @@ def _get_info_from_urls(self, urls: dict[str, list[str]]) -> PackageInfo:
info = self._get_info_from_wheel(universal_python2_wheel)
py3_info = self._get_info_from_wheel(universal_python3_wheel)
+
+ if info.requires_python or py3_info.requires_python:
+ info.requires_python = str(
+ parse_constraint(info.requires_python or "^2.7").union(
+ parse_constraint(py3_info.requires_python or "^3")
+ )
+ )
+
if py3_info.requires_dist:
if not info.requires_dist:
info.requires_dist = py3_info.requires_dist
diff --git a/tests/repositories/fixtures/legacy/poetry-test-py2-py3-metadata-merge.html b/tests/repositories/fixtures/legacy/poetry-test-py2-py3-metadata-merge.html
new file mode 100644
index 00000000000..7b43db0f21e
--- /dev/null
+++ b/tests/repositories/fixtures/legacy/poetry-test-py2-py3-metadata-merge.html
@@ -0,0 +1,11 @@
+
+
+
+ Links for poetry-test-py2-py3-metadata-merge
+
+
+ Links for ipython
+ poetry_test_py2_py3_metadata_merge-0.1.0-py2-none-any.whl
+ poetry_test_py2_py3_metadata_merge-0.1.0-py3-none-any.whl
+
+
diff --git a/tests/repositories/fixtures/pypi.org/dists/poetry_test_py2_py3_metadata_merge-0.1.0-py2-none-any.whl b/tests/repositories/fixtures/pypi.org/dists/poetry_test_py2_py3_metadata_merge-0.1.0-py2-none-any.whl
new file mode 100644
index 00000000000..255fcf7dab7
Binary files /dev/null and b/tests/repositories/fixtures/pypi.org/dists/poetry_test_py2_py3_metadata_merge-0.1.0-py2-none-any.whl differ
diff --git a/tests/repositories/fixtures/pypi.org/dists/poetry_test_py2_py3_metadata_merge-0.1.0-py3-none-any.whl b/tests/repositories/fixtures/pypi.org/dists/poetry_test_py2_py3_metadata_merge-0.1.0-py3-none-any.whl
new file mode 100644
index 00000000000..c4f890baafb
Binary files /dev/null and b/tests/repositories/fixtures/pypi.org/dists/poetry_test_py2_py3_metadata_merge-0.1.0-py3-none-any.whl differ
diff --git a/tests/repositories/test_legacy_repository.py b/tests/repositories/test_legacy_repository.py
index f1f44841fda..bb0c33f6a76 100644
--- a/tests/repositories/test_legacy_repository.py
+++ b/tests/repositories/test_legacy_repository.py
@@ -295,6 +295,16 @@ def test_get_package_from_both_py2_and_py3_specific_wheels():
assert str(required[5].marker) == 'sys_platform != "win32"'
+def test_get_package_from_both_py2_and_py3_specific_wheels_python_constraint():
+ repo = MockRepository()
+
+ package = repo.package("poetry-test-py2-py3-metadata-merge", "0.1.0")
+
+ assert package.name == "poetry-test-py2-py3-metadata-merge"
+ assert package.version.text == "0.1.0"
+ assert package.python_versions == ">=2.7,<2.8 || >=3.7,<4.0"
+
+
def test_get_package_with_dist_and_universal_py3_wheel():
repo = MockRepository()