Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

RecursionError in Poetry 1.5 #7964

Closed
4 tasks done
coldguy101 opened this issue May 19, 2023 · 4 comments · Fixed by python-poetry/poetry-core#593
Closed
4 tasks done

RecursionError in Poetry 1.5 #7964

coldguy101 opened this issue May 19, 2023 · 4 comments · Fixed by python-poetry/poetry-core#593
Labels
kind/bug Something isn't working as expected status/triage This issue needs to be triaged

Comments

@coldguy101
Copy link

  • I am on the latest stable Poetry version, installed using a recommended method.
  • I have searched the issues of this repo and believe that this is not a duplicate.
  • I have consulted the FAQ and blog for any relevant entries or release notes.
  • If an exception occurs when executing a command, I executed it again in debug mode (-vvv option) and have included the output below. (I did it with -vv, not -vvv)

Issue

This pyproject.toml locks perfectly fine in poetry 1.4.0, 1.4.1 and 1.4.2. The moment I upgrade to 1.5, I can no longer lock without getting a RecursionError. I've tried deleting the lock file, deleting the environment, removing some dependencies, etc. to no avail. For now, I'm downgrading back to 1.4.2.

   0: Duplicate dependencies for scipy
   0: Different requirements found for scipy (>=1.3) with markers (python_version > "3.9" or platform_system != "Windows" or platform_machine != "x86") and python_version < "3.12" and scipy (>=1.3,<1.9) with markers python_version == "3.8" and platform_system == "Windows" and platform_machine == "x86".
   1: Version solving took 0.477 seconds.
   1: Tried 1 solutions.

  Stack trace:

  4  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/puzzle/solver.py:155 in _solve
       result = resolve_version(self._package, self._provider)

  3  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/mixology/__init__.py:18 in resolve_version
       return solver.solve()

  2  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/mixology/version_solver.py:112 in solve
       next = self._choose_package_version()

  1  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/mixology/version_solver.py:430 in _choose_package_version
       package = self._provider.complete_package(package)

  OverrideNeeded

  ({Package('pandas', '1.3.5'): {'numpy': <Dependency numpy (>=1.17.3)>}}, {Package('pandas', '1.3.5'): {'numpy': <Dependency numpy (>=1.19.2)>}}, {Package('pandas', '1.3.5'): {'numpy': <Dependency numpy (>=1.20.0)>}})

  at ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/puzzle/provider.py:691 in complete_package
      687│                     current_overrides.update({dependency_package: package_overrides})
      688│                     overrides.append(current_overrides)
      689│
      690│             if overrides:
    → 691│                 raise OverrideNeeded(*overrides)
      692│
      693│         # Modifying dependencies as needed
      694│         clean_dependencies = []
      695│         for dep in dependencies:

The following error occurred when trying to handle this error:


  Stack trace:

  4  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/puzzle/solver.py:155 in _solve
       result = resolve_version(self._package, self._provider)

  3  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/mixology/__init__.py:18 in resolve_version
       return solver.solve()

  2  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/mixology/version_solver.py:112 in solve
       next = self._choose_package_version()

  1  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/mixology/version_solver.py:430 in _choose_package_version
       package = self._provider.complete_package(package)

  OverrideNeeded

  ({Package('pandas', '1.3.5'): {'numpy': <Dependency numpy (>=1.17.3)>}, Package('mlflow', '2.1.1'): {'jinja2': <Dependency Jinja2 (>=2.11,<4)>}}, {Package('pandas', '1.3.5'): {'numpy': <Dependency numpy (>=1.17.3)>}, Package('mlflow', '2.1.1'): {'jinja2': <Dependency Jinja2 (>=3.0,<4)>}})

  at ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/puzzle/provider.py:691 in complete_package
      687│                     current_overrides.update({dependency_package: package_overrides})
      688│                     overrides.append(current_overrides)
      689│
      690│             if overrides:
    → 691│                 raise OverrideNeeded(*overrides)
      692│
      693│         # Modifying dependencies as needed
      694│         clean_dependencies = []
      695│         for dep in dependencies:

The following error occurred when trying to handle this error:


  Stack trace:

  998  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/cleo/application.py:327 in run
         exit_code = self._run(io)

  997  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/console/application.py:190 in _run
         exit_code: int = super()._run(io)

  996  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/cleo/application.py:431 in _run
         exit_code = self._run_command(command, io)

  995  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/cleo/application.py:473 in _run_command
         raise error

  994  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/cleo/application.py:457 in _run_command
         exit_code = command.run(io)

  993  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/cleo/commands/base_command.py:119 in run
         status_code = self.execute(io)

  992  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/cleo/commands/command.py:62 in execute
         return self.handle()

  991  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/console/commands/lock.py:52 in handle
         return self.installer.run()

  990  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/installation/installer.py:104 in run
         return self._do_install()

  989  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/installation/installer.py:241 in _do_install
         ops = solver.solve(use_latest=self._whitelist).calculate_operations()

  988  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/puzzle/solver.py:72 in solve
         packages, depths = self._solve()

  987  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/puzzle/solver.py:159 in _solve
         return self._solve_in_compatibility_mode(e.overrides)

  986  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/puzzle/solver.py:133 in _solve_in_compatibility_mode
         _packages, _depths = self._solve()

  985  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/puzzle/solver.py:159 in _solve
         return self._solve_in_compatibility_mode(e.overrides)

  984  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/puzzle/solver.py:133 in _solve_in_compatibility_mode
         _packages, _depths = self._solve()

  983  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/puzzle/solver.py:155 in _solve
         result = resolve_version(self._package, self._provider)

  982  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/mixology/__init__.py:18 in resolve_version
         return solver.solve()

  981  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/mixology/version_solver.py:112 in solve
         next = self._choose_package_version()

  980  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/mixology/version_solver.py:430 in _choose_package_version
         package = self._provider.complete_package(package)

  979  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/puzzle/provider.py:681 in complete_package
         if not overrides_marker_intersection.intersect(dep.marker).is_empty():

  978  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/core/version/markers.py:564 in intersect
         return intersection(self, other)

  977  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/core/version/markers.py:934 in intersection
         return dnf(MultiMarker(*markers))

  976  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/core/version/markers.py:923 in dnf
         return MarkerUnion.of(

  975  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/core/version/markers.py:712 in of
         union = mark.union_simplify(marker)

  974  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/core/version/markers.py:601 in union_simplify
         unique_union = MultiMarker(*unique_markers).union(

  973  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/core/version/markers.py:567 in union
         return union(self, other)

  972  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/core/version/markers.py:947 in union
         conjunction = cnf(unnormalized)

  971  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/core/version/markers.py:907 in cnf
         *[MarkerUnion.of(*c) for c in itertools.product(*sub_marker_lists)]

  970  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/core/version/markers.py:907 in <listcomp>
         *[MarkerUnion.of(*c) for c in itertools.product(*sub_marker_lists)]

  969  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/core/version/markers.py:700 in of
         new_marker = mark.union(marker)

  968  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/core/version/markers.py:274 in union
         merged = _merge_single_markers(self, other, MarkerUnion)

  967  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/core/version/markers.py:977 in _merge_single_markers
         result_constraint = merge_method(marker2.constraint)  # type: ignore[arg-type]

  ...  Previous frame repeated 964 times

    2  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/core/constraints/generic/multi_constraint.py:94 in union
         return other.union(self)

    1  ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/core/constraints/generic/multi_constraint.py:94 in union
         return other.union(self)

  RecursionError

  maximum recursion depth exceeded while calling a Python object

  at ~/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/core/constraints/generic/multi_constraint.py:93 in union
       89│
       90│         return MultiConstraint(*self._constraints, other)
       91│
       92│     def union(self, other: BaseConstraint) -> BaseConstraint:
    →  93│         if not isinstance(other, Constraint):
       94│             return other.union(self)
       95│
       96│         if other in self._constraints:
       97│             return other
@coldguy101 coldguy101 added kind/bug Something isn't working as expected status/triage This issue needs to be triaged labels May 19, 2023
@dimbleby
Copy link
Contributor

union (or intersection) of a MultiConstraint with another MultiConstraint recurses this way.

Looks like this has been broken for quite some time - including in 1.4.2 - so it's not clear what has disturbed the balance.

@nomaddo
Copy link

nomaddo commented May 22, 2023

Do you plan to release the minor fix version?
This is critical blocker to start using poetry 1.5 to me.

@radoering
Copy link
Member

Yes, this will be included in poetry-core 1.6.1 and thereby in poetry 1.5.1.

Copy link

This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Feb 29, 2024
# for free to subscribe to this conversation on GitHub. Already have an account? #.
Labels
kind/bug Something isn't working as expected status/triage This issue needs to be triaged
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants