poetry: Maximum recursion depth exceeded

  • I am on the latest Poetry version.
  • I have searched the issues of this repo and believe that this is not a duplicate.
  • If an exception occurs when executing a command, I executed it again in debug mode (-vvv option).
  • OS version and name: OS X 10.14.5
  • Poetry version: 0.12.17
[tool.black]
skip-string-normalization = true

[tool.poetry]
name = "kompost"
version = "0.1.0"
description = ""
authors = ["Software Team <software@software.com>"]

[tool.poetry.dependencies]
celery = "*"
flask-celeryext = "*"

[build-system]
requires = ["poetry"]
build-backend = "poetry.masonry.api"

Issue

poetry install --dry-run                                                                    5.7s  Fri 19 Jul 14:57:40 2019
Updating dependencies
Resolving dependencies... (24.2s)

[RecursionError]
maximum recursion depth exceeded

install [--no-dev] [--dry-run] [-E|--extras EXTRAS] [--develop DEVELOP]
poetry debug:resolve -vvv
Resolving dependencies...
   1: fact: kompost is 0.1.0
   1: derived: kompost
   1: fact: kompost depends on celery (*)
   1: fact: kompost depends on flask-celeryext (*)
   1: selecting kompost (0.1.0)
   1: derived: flask-celeryext (*)
   1: derived: celery (*)
PyPI: 7 packages found for flask-celeryext *
PyPI: 132 packages found for celery *
   0: Duplicate dependencies for celery
   0: Different requirements found for celery (>=3.1) and celery (>=4.3).
   1: Version solving took 0.096 seconds.
   1: Tried 1 solutions.
   0: Retrying dependency resolution for Python (>=3.7,<3.8).
   1: fact: kompost is 0.1.0
   1: derived: kompost
   1: fact: kompost depends on celery (*)
   1: fact: kompost depends on flask-celeryext (*)
   1: selecting kompost (0.1.0)
   1: derived: flask-celeryext (*)
   1: derived: celery (*)
   0: Duplicate dependencies for celery
   0: Different requirements found for celery (>=3.1) and celery (>=4.3).

About this issue

  • Original URL
  • State: closed
  • Created 5 years ago
  • Reactions: 16
  • Comments: 38 (7 by maintainers)

Commits related to this issue

Most upvoted comments

I think this problem is too impactful to be quiet for so long(while work arounds might be useful, they don’t solve the issue) The reason why I tried poetry was because of its dependency resolution(in particular it’s support for multiple OS’es resolution). I know this is open source and don’t take this as a demand for a quick fix or anything like that, but could we have some kind of update on the issue? Is this something that someone with minimal knowledge of the dependency resolution algorithm could help out?

I second this issue. It makes it impassible to select different versions depending on operating system. This is critical for packages where specially compiled versions are needed on windows… because of windows.

Got this error while running poetry install on GitHub runners for all systems: ubuntu-latest, windows-latest, macos-latest.

The error was same:

Creating virtualenv opensearch-logger-V0Spp9zQ-py3.8 in /home/runner/.cache/pypoetry/virtualenvs
Using virtualenv: /home/runner/.cache/pypoetry/virtualenvs/opensearch-logger-V0Spp9zQ-py3.8
Using virtualenv: /home/runner/.cache/pypoetry/virtualenvs/opensearch-logger-V0Spp9zQ-py3.8
Installing dependencies from lock file

[RecursionError]
maximum recursion depth exceeded

Everything resolves without problem on desktop machine. I removed poetry.lock file and entire virtual environment and reinstalled it all from scratch, then pushed to the runners and got the same error.

The project is open source, so GitHub Actions build is open and visible along with the corresponding commit: https://github.com/vduseev/opensearch-logger/runs/4138254625?check_suite_focus=true.

The dependencies looked like this.

[tool.poetry.dependencies]
opensearch-py = "^1.0.0"
python = "^3.8"

[tool.poetry.dev-dependencies]
black = "^21.10b0"
bump2version = "^1.0.1"
flake8 = "^4.0.1"
flake8-blind-except = "^0.2.0"
flake8-bugbear = "^21.9.2"
flake8-comprehensions = "^3.7.0"
flake8-docstrings = "^1.6.0"
flake8-import-order = "^0.18.1"
flake8-polyfill = "^1.0.2"
ipython = "^7.29.0"
mypy = "^0.910"
pytest = "^6.2.5"
pytest-black = "^0.3.12"
pytest-cov = "^3.0.0"
pytest-flake8 = "^1.0.7"
pytest-mock = "^3.6.1"
pytest-mypy = "^0.8.1"
radon = "^5.1.0"

Full traceback is attached: traceback.txt.

I can confirm that this issue is resolved in the prerelease 1.1.0a3

@rayluo The 1.1.0 stable release should be available in August.

I second what @vduseev is saying. On GH Actions (ubuntu-latest), we faced this issue even with a very simple dependencies file using poetry@1.1.11:

[tool.poetry.dependencies]
python = "^3.8"
pandas = "^1.2.0"

[tool.poetry.dev-dependencies]

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

Downgrading to 1.1.10 fixed the issue for us (with no other changes). You can find the failed run (1.1.11), the successful run (1.1.10) and the commit that fixed it behind these links.

I’m encountering the same issue. What I did is this (starting from a clean project):

$ poetry init
... next, next, next, yes ...
$ poetry add --dev spyder

I’m running Python 3.7.2 on Windows 10. Does anybody know a work around until this is fixed?

I have a poetry project on Linux machine which builds without issues. Today I have cloned this project to Mac machine, removed poetry.lock and this issue occurred. poetry version 1.1.4 Here is the -vvv error log.

$ poetry install -vvv                                                                                                                                                    
/Users/pavels/.poetry/lib/poetry/_vendor/py2.7/subprocess32.py:149: RuntimeWarning: The _posixsubprocess module is not being used. Child process reliability may suffer if your program uses threads.
  "program uses threads.", RuntimeWarning)

Python 2.7 will no longer be supported in the next feature release of Poetry (1.2).
You should consider updating your Python version to a supported one.

Note that you will still be able to manage Python 2.7 projects by using the env command.
See https://python-poetry.org/docs/managing-environments/ for more information.

The currently activated Python version 2.7.16 is not supported by the project (^3.7.9).
Trying to find and use a compatible version.
Trying python3
Using python3 (3.8.2)
Virtualenv return-assistant-qa-jXMyULZa-py3.8 already exists.
Using virtualenv: /Users/pavels/Library/Caches/pypoetry/virtualenvs/return-assistant-qa-jXMyULZa-py3.8
Updating dependencies
Resolving dependencies...
   1: fact: return-assistant-qa is 0.1.0
   1: derived: return-assistant-qa
   1: fact: return-assistant-qa depends on fuzzywuzzy (^0.17.0)
   1: fact: return-assistant-qa depends on pandas (^1)
   1: fact: return-assistant-qa depends on gini-api-clients (^2.0)
   1: fact: return-assistant-qa depends on python-Levenshtein (^0.12.0)
   1: fact: return-assistant-qa depends on requests (^2.22.0)
   1: fact: return-assistant-qa depends on semantics_knowledge (^0.1.1)
   1: fact: return-assistant-qa depends on pytest-datadir (^1.3.1)
   1: fact: return-assistant-qa depends on pytest-html (^1.19.0)
   1: fact: return-assistant-qa depends on pytest (^5.0)
   1: fact: return-assistant-qa depends on pytest-cov (^2.5.0)
   1: fact: return-assistant-qa depends on pytest-datadir (^1.3.1)
   1: fact: return-assistant-qa depends on pytest-html (^1.19.0)
   1: fact: return-assistant-qa depends on pytest (^5.0)
   1: fact: return-assistant-qa depends on pytest-cov (^2.5.0)
   1: selecting return-assistant-qa (0.1.0)
   1: derived: pytest-cov (^2.5.0)
   1: derived: pytest (^5.0)
   1: derived: pytest-html (^1.19.0)
   1: derived: pytest-datadir (^1.3.1)
   1: derived: semantics_knowledge (^0.1.1)
   1: derived: requests (^2.22.0)
   1: derived: python-Levenshtein (^0.12.0)
   1: derived: gini-api-clients (^2.0)
   1: derived: pandas (^1)
   1: derived: fuzzywuzzy (^0.17.0)
   1: fact: pytest-datadir (1.3.1) depends on pytest (>=2.7.0)
   1: selecting pytest-datadir (1.3.1)
   1: fact: gini-api-clients (2.0.8) depends on python-magic (>=0.4.10,<1.0)
   1: fact: gini-api-clients (2.0.8) depends on requests (>=2.18,<3.0)
   1: selecting gini-api-clients (2.0.8)
   1: derived: python-magic (>=0.4.10,<1.0)
   1: selecting fuzzywuzzy (0.17.0)
   1: selecting semantics-knowledge (0.1.5)
   1: Version solving took 2.626 seconds.
   1: Tried 1 solutions.

RuntimeError

maximum recursion depth exceeded

Traceback (most recent call last):
  File "/Users/pavels/.poetry/lib/poetry/_vendor/py2.7/clikit/console_application.py", line 131, in run
    status_code = command.handle(parsed_args, io)
  File "/Users/pavels/.poetry/lib/poetry/_vendor/py2.7/clikit/api/command/command.py", line 120, in handle
    status_code = self._do_handle(args, io)
  File "/Users/pavels/.poetry/lib/poetry/_vendor/py2.7/clikit/api/command/command.py", line 171, in _do_handle
    return getattr(handler, handler_method)(args, io, self)
  File "/Users/pavels/.poetry/lib/poetry/_vendor/py2.7/cleo/commands/command.py", line 92, in wrap_handle
    return self.handle()
  File "/Users/pavels/.poetry/lib/poetry/console/commands/install.py", line 71, in handle
    return_code = self._installer.run()
  File "/Users/pavels/.poetry/lib/poetry/installation/installer.py", line 103, in run
    return self._do_install(local_repo)
  File "/Users/pavels/.poetry/lib/poetry/installation/installer.py", line 235, in _do_install
    ops = solver.solve(use_latest=self._whitelist)
  File "/Users/pavels/.poetry/lib/poetry/puzzle/solver.py", line 65, in solve
    packages, depths = self._solve(use_latest=use_latest)
  File "/Users/pavels/.poetry/lib/poetry/puzzle/solver.py", line 234, in _solve
    self._package, self._provider, locked=locked, use_latest=use_latest
  File "/Users/pavels/.poetry/lib/poetry/mixology/__init__.py", line 7, in resolve_version
    return solver.solve()
  File "/Users/pavels/.poetry/lib/poetry/mixology/version_solver.py", line 84, in solve
    next = self._choose_package_version()
  File "/Users/pavels/.poetry/lib/poetry/mixology/version_solver.py", line 397, in _choose_package_version
    version = self._provider.complete_package(version)
  File "/Users/pavels/.poetry/lib/poetry/puzzle/provider.py", line 437, in complete_package
    repository=package.dependency.source_name,
  File "/Users/pavels/.poetry/lib/poetry/repositories/pool.py", line 135, in package
    package = repo.package(name, version, extras=extras)
  File "/Users/pavels/.poetry/lib/poetry/repositories/legacy_repository.py", line 323, in package
    package = super(LegacyRepository, self).package(name, version, extras)
  File "/Users/pavels/.poetry/lib/poetry/repositories/pypi_repository.py", line 158, in package
    return self.get_release_info(name, version).to_package(name=name, extras=extras)
  File "/Users/pavels/.poetry/lib/poetry/repositories/pypi_repository.py", line 224, in get_release_info
    '{}:{}'.format(name, version), lambda: self._get_release_info(name, version)
  File "/Users/pavels/.poetry/lib/poetry/_vendor/py2.7/cachy/repository.py", line 174, in remember_forever
    val = value(callback)
  File "/Users/pavels/.poetry/lib/poetry/_vendor/py2.7/cachy/helpers.py", line 6, in value
    return val()
  File "/Users/pavels/.poetry/lib/poetry/repositories/pypi_repository.py", line 224, in <lambda>
    '{}:{}'.format(name, version), lambda: self._get_release_info(name, version)
  File "/Users/pavels/.poetry/lib/poetry/repositories/legacy_repository.py", line 377, in _get_release_info
    info = self._get_info_from_urls(urls)
  File "/Users/pavels/.poetry/lib/poetry/repositories/pypi_repository.py", line 419, in _get_info_from_urls
    return self._get_info_from_sdist(urls['sdist'][0])
  File "/Users/pavels/.poetry/lib/poetry/repositories/pypi_repository.py", line 447, in _get_info_from_sdist
    return PackageInfo.from_sdist(filepath)
  File "/Users/pavels/.poetry/lib/poetry/inspection/info.py", line 561, in from_sdist
    return cls._from_sdist_file(path=path)
  File "/Users/pavels/.poetry/lib/poetry/inspection/info.py", line 291, in _from_sdist_file
    new_info = cls.from_directory(path=sdist_dir)
  File "/Users/pavels/.poetry/lib/poetry/inspection/info.py", line 534, in from_directory
    info = cls.from_metadata(path)
  File "/Users/pavels/.poetry/lib/poetry/inspection/info.py", line 390, in from_metadata
    for directory in directories:
  File "/Users/pavels/.poetry/lib/poetry/inspection/info.py", line 375, in _find_dist_info
    for d in directories:
  File "/Users/pavels/.poetry/lib/poetry/_vendor/py2.7/pathlib2/__init__.py", line 1366, in glob
    for p in selector.select_from(self):
  File "/Users/pavels/.poetry/lib/poetry/_vendor/py2.7/pathlib2/__init__.py", line 799, in _select_from
    for x in _try_except_permissionerror_iter(try_iter, except_iter):
  File "/Users/pavels/.poetry/lib/poetry/_vendor/py2.7/pathlib2/__init__.py", line 147, in _try_except_permissionerror_iter
    for x in try_iter():
  File "/Users/pavels/.poetry/lib/poetry/_vendor/py2.7/pathlib2/__init__.py", line 786, in try_iter
    parent_path, is_dir, scandir):
  File "/Users/pavels/.poetry/lib/poetry/_vendor/py2.7/pathlib2/__init__.py", line 777, in _iterate_directories
    for x in _try_except_permissionerror_iter(try_iter, except_iter):
  File "/Users/pavels/.poetry/lib/poetry/_vendor/py2.7/pathlib2/__init__.py", line 147, in _try_except_permissionerror_iter
    for x in try_iter():
  File "/Users/pavels/.poetry/lib/poetry/_vendor/py2.7/pathlib2/__init__.py", line 770, in try_iter
    for p in self._iterate_directories(path, is_dir, scandir):
  File "/Users/pavels/.poetry/lib/poetry/_vendor/py2.7/pathlib2/__init__.py", line 777, in _iterate_directories
    for x in _try_except_permissionerror_iter(try_iter, except_iter):
  File "/Users/pavels/.poetry/lib/poetry/_vendor/py2.7/pathlib2/__init__.py", line 147, in _try_except_permissionerror_iter
    for x in try_iter():
  File "/Users/pavels/.poetry/lib/poetry/_vendor/py2.7/pathlib2/__init__.py", line 770, in try_iter
    for p in self._iterate_directories(path, is_dir, scandir):
  File "/Users/pavels/.poetry/lib/poetry/_vendor/py2.7/pathlib2/__init__.py", line 777, in _iterate_directories
    for x in _try_except_permissionerror_iter(try_iter, except_iter):
  File "/Users/pavels/.poetry/lib/poetry/_vendor/py2.7/pathlib2/__init__.py", line 147, in _try_except_permissionerror_iter
    for x in try_iter():
  File "/Users/pavels/.poetry/lib/poetry/_vendor/py2.7/pathlib2/__init__.py", line 770, in try_iter
    for p in self._iterate_directories(path, is_dir, scandir):
  File "/Users/pavels/.poetry/lib/poetry/_vendor/py2.7/pathlib2/__init__.py", line 777, in _iterate_directories
    for x in _try_except_permissionerror_iter(try_iter, except_iter):
  File "/Users/pavels/.poetry/lib/poetry/_vendor/py2.7/pathlib2/__init__.py", line 147, in _try_except_permissionerror_iter
    for x in try_iter():
  File "/Users/pavels/.poetry/lib/poetry/_vendor/py2.7/pathlib2/__init__.py", line 770, in try_iter
    for p in self._iterate_directories(path, is_dir, scandir):
  File "/Users/pavels/.poetry/lib/poetry/_vendor/py2.7/pathlib2/__init__.py", line 777, in _iterate_directories
    for x in _try_except_permissionerror_iter(try_iter, except_iter):
  File "/Users/pavels/.poetry/lib/poetry/_vendor/py2.7/pathlib2/__init__.py", line 147, in _try_except_permissionerror_iter
    for x in try_iter():
  
 (...)
  File "/Users/pavels/.poetry/lib/poetry/_vendor/py2.7/pathlib2/__init__.py", line 764, in try_iter
    entry_is_dir = entry.is_dir()
  File "/Users/pavels/.poetry/lib/poetry/_vendor/py2.7/scandir.py", line 504, in is_dir
    st = self.stat(follow_symlinks=follow_symlinks)
  File "/Users/pavels/.poetry/lib/poetry/_vendor/py2.7/scandir.py", line 488, in stat
    if self.is_symlink():
  File "/Users/pavels/.poetry/lib/poetry/_vendor/py2.7/scandir.py", line 529, in is_symlink
    st = self.stat(follow_symlinks=False)
  File "/Users/pavels/.poetry/lib/poetry/_vendor/py2.7/scandir.py", line 497, in stat
    self._lstat = lstat(self.path)
  File "/Users/pavels/.poetry/lib/poetry/_vendor/py2.7/scandir.py", line 482, in path
    self._path = join(self._scandir_path, self.name)

Same issue when I run poetry add scrapy.

looks like this was duplicated at #3626 and #3749, both of which went on to agree that it was a problem caused by the now deprecated get-poetry.py installer

Our problem reported in one of the comments in this issue is fixed in the 1.1.0a series release

Hi @philipbel! unfortunately, the only workaround for me was editing ‘spyder-kernels’ - here my fork updated to spyder-kernels 1.9 https://github.com/danieltomasz/spyder-kernels, you could fork it for yourself, I declared it as an github dependency in my pyproject.toml

spyder-kernels = { git = "https://github.com/danieltomasz/spyder-kernels.git", branch = "poetry" }

I am waiting for poetry team to solve that, spyder team doesn’t want to remove this double declaration in their code,

Removing the poetry.lock file does the trick, poetry add works again. It’s slow, but it works.