diff --git a/src/poetry/core/factory.py b/src/poetry/core/factory.py index 67012287c..e263333b8 100644 --- a/src/poetry/core/factory.py +++ b/src/poetry/core/factory.py @@ -243,6 +243,7 @@ def create_dependency( from poetry.core.packages.file_dependency import FileDependency from poetry.core.packages.url_dependency import URLDependency from poetry.core.packages.utils.utils import create_nested_marker + from poetry.core.packages.utils.utils import get_python_constraint_from_marker from poetry.core.packages.vcs_dependency import VCSDependency from poetry.core.semver.helpers import parse_constraint from poetry.core.version.markers import AnyMarker @@ -366,6 +367,10 @@ def create_dependency( ) else: marker = parse_marker(markers) + # possibility that python constraint appears in markers, not keywords + if not python_versions and markers: + python_versions_marker = get_python_constraint_from_marker(marker) + python_versions = python_versions_marker if not marker.is_any(): dependency.marker = marker diff --git a/tests/test_factory.py b/tests/test_factory.py index 3a9d80d39..073c255ff 100644 --- a/tests/test_factory.py +++ b/tests/test_factory.py @@ -231,3 +231,13 @@ def test_create_poetry_fails_with_invalid_dev_dependencies_iff_with_dev_is_true( Factory().create_poetry( fixtures_dir / "project_with_invalid_dev_deps", with_groups=False ) + + +def test_create_dependency_python_constraint_populated_from_markers(): + constraint = { + "version": "1.2.3.", + "markers": 'python_version=="3.8" and sys_platform=="linux"', + } + dependency = Factory().create_dependency("a", constraint) + + assert str(dependency._python_constraint) == ">=3.8,<3.9"