diff --git a/CHANGELOG.md b/CHANGELOG.md index 16e5d1616bd..8063d90a156 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Change Log +## [1.1.8.1] - 2022-01-31 + +### Changed + +- Changed dependency resolution to only consider desired target environment markers to speed up dependency resolution. Defaults to hard coded values. + ## [1.1.8] - 2021-08-19 ### Fixed diff --git a/poetry/installation/installer.py b/poetry/installation/installer.py index 8cef65d529b..f87912e7554 100644 --- a/poetry/installation/installer.py +++ b/poetry/installation/installer.py @@ -223,6 +223,10 @@ def _do_install(self, local_repo): raise ValueError("Extra [{}] is not specified.".format(extra)) self._io.write_line("Updating dependencies") + + # TODO (kazesberger) use/read/parse custom poetry config from pyproject.toml and provide opportunity to + # configure "target environment markers" so we can skip any non-validating dependency markers + solver = Solver( self._package, self._pool, diff --git a/poetry/puzzle/provider.py b/poetry/puzzle/provider.py index c05efbd6844..d30015266fa 100755 --- a/poetry/puzzle/provider.py +++ b/poetry/puzzle/provider.py @@ -5,7 +5,7 @@ from contextlib import contextmanager from tempfile import mkdtemp -from typing import Any +from typing import Any, Dict from typing import List from typing import Optional @@ -479,6 +479,37 @@ def complete_package( if self._env and not dep.marker.validate(self._env.marker_env): continue + def get_target_env_markers_from_env_vars() -> Dict[str, str]: + import os + + ENV_VAR_PREFIX = "POETRY_MARKER_" + DEFAULT_HARDCODED_MARKERS_DICT = {'implementation_name': 'cpython', + 'implementation_version': '3.8.10', + 'interpreter_name': 'cp', + 'interpreter_version': '38', + 'os_name': 'posix', + 'platform_machine': 'x86_64', + 'platform_python_implementation': 'CPython', + 'platform_release': '5.11.0-46-generic', + 'platform_system': 'Linux', + 'platform_version': '#51~20.04.1-Ubuntu SMP Fri Jan 7 06:51:40 UTC 2022', + 'python_full_version': '3.8.10', + 'python_version': '3.8', + 'sys_platform': 'linux', + 'version_info': [3, 8, 10, 'final', 0]} + + target_markers = [] + for key, val in os.environ.items(): + if key[:14] == ENV_VAR_PREFIX: + target_markers.append((key[len(ENV_VAR_PREFIX):].lower(), val)) + if target_markers: + return target_markers + else: + return DEFAULT_HARDCODED_MARKERS_DICT + + if not dep.marker.validate(get_target_env_markers_from_env_vars()): + continue + if not package.is_root(): if (dep.is_optional() and dep.name not in optional_dependencies) or ( dep.in_extras diff --git a/pyproject.toml b/pyproject.toml index eb55fd12270..10ce546f3a2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "poetry" -version = "1.1.8" +version = "1.1.8.1" description = "Python dependency management and packaging made easy." authors = [ "Sébastien Eustace "