python-poetry / poetry

Python packaging and dependency management made easy
https://python-poetry.org
MIT License
31.14k stars 2.25k forks source link

Poetry add failing with RuntimeError #3270

Closed jkary closed 1 year ago

jkary commented 3 years ago

Issue

When I try to do 'poetry add', a RuntimeError is raised. I've encountered this issue with different pip modules. Here is the relevant data:

JKARY-M-V80G:svs-alto jkary$ poetry self update
Updating to 1.1.3
 - Downloading poetry-1.1.3-darwin.tar.gz 100%

Poetry (1.1.3) is installed now. Great!
JKARY-M-V80G:svs-alto jkary$ poetry add ansible
Using version ^2.10.1 for ansible

Updating dependencies
Resolving dependencies... (5.1s)

  RuntimeError

  generator didn't stop after throw()

  at ~/.pyenv/versions/3.7.2/lib/python3.7/contextlib.py:161 in __exit__
      157│                 # by 'except BaseException'.
      158│                 if sys.exc_info()[1] is value:
      159│                     return False
      160│                 raise
    → 161│             raise RuntimeError("generator didn't stop after throw()")
      162│
      163│
      164│ class _AsyncGeneratorContextManager(_GeneratorContextManagerBase,
      165│                                     AbstractAsyncContextManager):
JKARY-M-V80G:svs-alto jkary$ poetry --version
Poetry version 1.1.3
JKARY-M-V80G:svs-alto jkary$ python --version
Python 3.7.2
JKARY-M-V80G:svs-alto jkary$ poetry add -vvv ansible
Using virtualenv: /Users/jkary/src/python/svs-alto/.venv
PyPI: No release information found for ansible-1.9.0, skipping
PyPI: No release information found for ansible-2.0.0, skipping
PyPI: 166 packages found for ansible *
Using version ^2.10.1 for ansible

Updating dependencies
Resolving dependencies...
   1: fact: svs-alto is 0.1.0
   1: derived: svs-alto
   1: fact: svs-alto depends on python-xml2dict (^0.1.1)
   1: fact: svs-alto depends on jupyter (^1.0.0)
   1: fact: svs-alto depends on pandas (^1.1.0)
   1: fact: svs-alto depends on openpyxl (^3.0.4)
   1: fact: svs-alto depends on yaml-1.3 (^0.1.0)
   1: fact: svs-alto depends on pyyaml (^5.3.1)
   1: fact: svs-alto depends on json2yaml (^1.1.1)
   1: fact: svs-alto depends on xlrd (^1.2.0)
   1: fact: svs-alto depends on jinja2 (^2.11.2)
   1: fact: svs-alto depends on virl2_client (2.1.0-rc.1 lib/virl2-client)
   1: fact: svs-alto depends on ucsmsdk (^0.9.10)
   1: fact: svs-alto depends on ansible (^2.10.1)
   1: fact: svs-alto depends on black (^19.10b0)
   1: fact: svs-alto depends on pytest (^6.0.1)
   1: fact: svs-alto depends on black (^19.10b0)
   1: fact: svs-alto depends on pytest (^6.0.1)
   1: selecting svs-alto (0.1.0)
   1: derived: pytest (^6.0.1)
   1: derived: black (^19.10b0)
   1: derived: ansible (^2.10.1)
   1: derived: ucsmsdk (^0.9.10)
   1: derived: virl2_client (2.1.0-rc.1 lib/virl2-client)
   1: derived: jinja2 (^2.11.2)
   1: derived: xlrd (^1.2.0)
   1: derived: json2yaml (^1.1.1)
   1: derived: pyyaml (^5.3.1)
   1: derived: yaml-1.3 (^0.1.0)
   1: derived: openpyxl (^3.0.4)
   1: derived: pandas (^1.1.0)
   1: derived: jupyter (^1.0.0)
   1: derived: python-xml2dict (^0.1.1)
   1: fact: pytest (6.1.1) depends on attrs (>=17.4.0)
   1: fact: pytest (6.1.1) depends on iniconfig (*)
   1: fact: pytest (6.1.1) depends on packaging (*)
   1: fact: pytest (6.1.1) depends on pluggy (>=0.12,<1.0)
   1: fact: pytest (6.1.1) depends on py (>=1.8.2)
   1: fact: pytest (6.1.1) depends on toml (*)
   1: fact: pytest (6.1.1) depends on importlib-metadata (>=0.12)
   1: fact: pytest (6.1.1) depends on atomicwrites (>=1.0)
   1: fact: pytest (6.1.1) depends on colorama (*)
   1: selecting pytest (6.1.1)
   1: derived: colorama (*)
   1: derived: atomicwrites (>=1.0)
   1: derived: importlib-metadata (>=0.12)
   1: derived: toml (*)
   1: derived: py (>=1.8.2)
   1: derived: pluggy (>=0.12,<1.0)
   1: derived: packaging (*)
   1: derived: iniconfig (*)
   1: derived: attrs (>=17.4.0)
   1: fact: black (19.10b0) depends on click (>=6.5)
   1: fact: black (19.10b0) depends on attrs (>=18.1.0)
   1: fact: black (19.10b0) depends on appdirs (*)
   1: fact: black (19.10b0) depends on toml (>=0.9.4)
   1: fact: black (19.10b0) depends on typed-ast (>=1.4.0)
   1: fact: black (19.10b0) depends on regex (*)
   1: fact: black (19.10b0) depends on pathspec (>=0.6,<1)
   1: selecting black (19.10b0)
   1: derived: pathspec (>=0.6,<1)
   1: derived: regex (*)
   1: derived: typed-ast (>=1.4.0)
   1: derived: toml (>=0.9.4)
   1: derived: appdirs (*)
   1: derived: attrs (>=18.1.0)
   1: derived: click (>=6.5)
PyPI: No release information found for ansible-1.9.0, skipping
PyPI: No release information found for ansible-2.0.0, skipping
PyPI: 1 packages found for ansible >=2.10.1,<3.0.0
   1: fact: ansible (2.10.1) depends on ansible-base (>=2.10.2,<2.11)
   1: selecting ansible (2.10.1)
   1: derived: ansible-base (>=2.10.2,<2.11)
PyPI: 1 packages found for ansible-base >=2.10.2,<2.11
   1: fact: ucsmsdk (0.9.10) depends on pyparsing (*)
   1: fact: ucsmsdk (0.9.10) depends on six (*)
   1: selecting ucsmsdk (0.9.10)
   1: derived: six (*)
   1: derived: pyparsing (*)
   1: fact: virl2-client (2.1.0-rc.1 /Users/jkary/src/python/svs-alto/lib/virl2-client) depends on requests (^2)
   1: selecting virl2-client (2.1.0-rc.1 /Users/jkary/src/python/svs-alto/lib/virl2-client)
   1: derived: requests (^2)
   1: fact: jinja2 (2.11.2) depends on MarkupSafe (>=0.23)
   1: selecting jinja2 (2.11.2)
   1: derived: MarkupSafe (>=0.23)
   1: selecting xlrd (1.2.0)
   1: fact: json2yaml (1.1.1) depends on pyyaml (*)
   1: fact: json2yaml (1.1.1) depends on pyaml (*)
   1: fact: json2yaml (1.1.1) depends on docopt (*)
   1: selecting json2yaml (1.1.1)
   1: derived: docopt (*)
   1: derived: pyaml (*)
   1: selecting pyyaml (5.3.1)
   1: fact: yaml-1.3 (0.1.0) depends on ruamel.appconfig (*)
   1: fact: yaml-1.3 (0.1.0) depends on ruamel.std.argparse (>=0.8)
   1: selecting yaml-1.3 (0.1.0)
   1: derived: ruamel.std.argparse (>=0.8)
   1: derived: ruamel.appconfig (*)
   1: fact: openpyxl (3.0.5) depends on jdcal (*)
   1: fact: openpyxl (3.0.5) depends on et-xmlfile (*)
   1: selecting openpyxl (3.0.5)
   1: derived: et-xmlfile (*)
   1: derived: jdcal (*)
   1: fact: pandas (1.1.3) depends on python-dateutil (>=2.7.3)
   1: fact: pandas (1.1.3) depends on pytz (>=2017.2)
   1: fact: pandas (1.1.3) depends on numpy (>=1.15.4)
   1: selecting pandas (1.1.3)
   1: derived: numpy (>=1.15.4)
   1: derived: pytz (>=2017.2)
   1: derived: python-dateutil (>=2.7.3)
   1: fact: jupyter (1.0.0) depends on notebook (*)
   1: fact: jupyter (1.0.0) depends on qtconsole (*)
   1: fact: jupyter (1.0.0) depends on jupyter-console (*)
   1: fact: jupyter (1.0.0) depends on nbconvert (*)
   1: fact: jupyter (1.0.0) depends on ipykernel (*)
   1: fact: jupyter (1.0.0) depends on ipywidgets (*)
   1: selecting jupyter (1.0.0)
   1: derived: ipywidgets (*)
   1: derived: ipykernel (*)
   1: derived: nbconvert (*)
   1: derived: jupyter-console (*)
   1: derived: qtconsole (*)
   1: derived: notebook (*)
   1: selecting python-xml2dict (0.1.1)
   1: selecting colorama (0.4.4)
   1: selecting atomicwrites (1.4.0)
   1: fact: importlib-metadata (2.0.0) depends on zipp (>=0.5)
   1: selecting importlib-metadata (2.0.0)
   1: derived: zipp (>=0.5)
   1: selecting toml (0.10.1)
   1: selecting py (1.9.0)
   1: fact: pluggy (0.13.1) depends on importlib-metadata (>=0.12)
   1: selecting pluggy (0.13.1)
   1: fact: packaging (20.4) depends on pyparsing (>=2.0.2)
   1: fact: packaging (20.4) depends on six (*)
   1: selecting packaging (20.4)
   1: derived: pyparsing (>=2.0.2)
   1: selecting iniconfig (1.1.1)
   1: selecting attrs (20.2.0)
   1: selecting pathspec (0.8.0)
   1: selecting regex (2020.10.15)
   1: selecting typed-ast (1.4.1)
   1: selecting appdirs (1.4.4)
   1: selecting click (7.1.2)
PyPI: Getting info for ansible-base (2.10.2) from PyPI
PyPI: No dependencies found, downloading archives
PyPI: Downloading sdist: ansible-base-2.10.2.tar.gz
   1: Version solving took 5.247 seconds.
   1: Tried 1 solutions.

  Stack trace:

  26  ~/.poetry/lib/poetry/_vendor/py3.7/clikit/console_application.py:131 in run
       129│             parsed_args = resolved_command.args
       130│
     → 131│             status_code = command.handle(parsed_args, io)
       132│         except KeyboardInterrupt:
       133│             status_code = 1

  25  ~/.poetry/lib/poetry/_vendor/py3.7/clikit/api/command/command.py:120 in handle
       118│     def handle(self, args, io):  # type: (Args, IO) -> int
       119│         try:
     → 120│             status_code = self._do_handle(args, io)
       121│         except KeyboardInterrupt:
       122│             if io.is_debug():

  24  ~/.poetry/lib/poetry/_vendor/py3.7/clikit/api/command/command.py:171 in _do_handle
       169│         handler_method = self._config.handler_method
       170│
     → 171│         return getattr(handler, handler_method)(args, io, self)
       172│
       173│     def __repr__(self):  # type: () -> str

  23  ~/.poetry/lib/poetry/_vendor/py3.7/cleo/commands/command.py:92 in wrap_handle
        90│         self._command = command
        91│
     →  92│         return self.handle()
        93│
        94│     def handle(self):  # type: () -> Optional[int]

  22  ~/.poetry/lib/poetry/console/commands/add.py:174 in handle
       172│
       173│         try:
     → 174│             status = self._installer.run()
       175│         except Exception:
       176│             self.poetry.file.write(original_content)

  21  ~/.poetry/lib/poetry/installation/installer.py:103 in run
       101│         local_repo = Repository()
       102│
     → 103│         return self._do_install(local_repo)
       104│
       105│     def dry_run(self, dry_run=True):  # type: (bool) -> Installer

  20  ~/.poetry/lib/poetry/installation/installer.py:235 in _do_install
       233│             )
       234│
     → 235│             ops = solver.solve(use_latest=self._whitelist)
       236│         else:
       237│             self._io.write_line("Installing dependencies from lock file")

  19  ~/.poetry/lib/poetry/puzzle/solver.py:65 in solve
        63│         with self._provider.progress():
        64│             start = time.time()
     →  65│             packages, depths = self._solve(use_latest=use_latest)
        66│             end = time.time()
        67│

  18  ~/.poetry/lib/poetry/puzzle/solver.py:234 in _solve
       232│         try:
       233│             result = resolve_version(
     → 234│                 self._package, self._provider, locked=locked, use_latest=use_latest
       235│             )
       236│

  17  ~/.poetry/lib/poetry/mixology/__init__.py:7 in resolve_version
       5│     solver = VersionSolver(root, provider, locked=locked, use_latest=use_latest)
       6│
     → 7│     return solver.solve()
       8│

  16  ~/.poetry/lib/poetry/mixology/version_solver.py:84 in solve
        82│             while next is not None:
        83│                 self._propagate(next)
     →  84│                 next = self._choose_package_version()
        85│
        86│             return self._result()

  15  ~/.poetry/lib/poetry/mixology/version_solver.py:397 in _choose_package_version
       395│             version = locked
       396│
     → 397│         version = self._provider.complete_package(version)
       398│
       399│         conflict = False

  14  ~/.poetry/lib/poetry/puzzle/provider.py:436 in complete_package
       434│                     package.version.text,
       435│                     extras=list(package.dependency.extras),
     → 436│                     repository=package.dependency.source_name,
       437│                 ),
       438│             )

  13  ~/.poetry/lib/poetry/repositories/pool.py:135 in package
       133│             for idx, repo in enumerate(self._repositories):
       134│                 try:
     → 135│                     package = repo.package(name, version, extras=extras)
       136│                 except PackageNotFound:
       137│                     continue

  12  ~/.poetry/lib/poetry/repositories/pypi_repository.py:162 in package
       160│         extras=None,  # type: (Union[list, None])
       161│     ):  # type: (...) -> Package
     → 162│         return self.get_release_info(name, version).to_package(name=name, extras=extras)
       163│
       164│     def search(self, query):

  11  ~/.poetry/lib/poetry/repositories/pypi_repository.py:228 in get_release_info
       226│
       227│         cached = self._cache.remember_forever(
     → 228│             "{}:{}".format(name, version), lambda: self._get_release_info(name, version)
       229│         )
       230│

  10  ~/.poetry/lib/poetry/_vendor/py3.7/cachy/repository.py:174 in remember_forever
       172│             return val
       173│
     → 174│         val = value(callback)
       175│
       176│         self.forever(key, val)

   9  ~/.poetry/lib/poetry/_vendor/py3.7/cachy/helpers.py:6 in value
       4│ def value(val):
       5│     if callable(val):
     → 6│         return val()
       7│
       8│     return val

   8  ~/.poetry/lib/poetry/repositories/pypi_repository.py:228 in <lambda>
       226│
       227│         cached = self._cache.remember_forever(
     → 228│             "{}:{}".format(name, version), lambda: self._get_release_info(name, version)
       229│         )
       230│

   7  ~/.poetry/lib/poetry/repositories/pypi_repository.py:308 in _get_release_info
       306│                 return data.asdict()
       307│
     → 308│             info = self._get_info_from_urls(urls)
       309│
       310│             data.requires_dist = info.requires_dist

   6  ~/.poetry/lib/poetry/repositories/pypi_repository.py:423 in _get_info_from_urls
       421│                 return self._get_info_from_wheel(platform_specific_wheels[0])
       422│
     → 423│         return self._get_info_from_sdist(urls["sdist"][0])
       424│
       425│     def _get_info_from_wheel(self, url):  # type: (str) -> PackageInfo

   5  ~/.poetry/lib/poetry/repositories/pypi_repository.py:451 in _get_info_from_sdist
       449│             self._download(url, str(filepath))
       450│
     → 451│             return PackageInfo.from_sdist(filepath)
       452│
       453│     def _download(self, url, dest):  # type: (str, str) -> None

   4  ~/.poetry/lib/poetry/inspection/info.py:561 in from_sdist
       559│         """
       560│         if path.is_file():
     → 561│             return cls._from_sdist_file(path=path)
       562│
       563│         # if we get here then it is neither an sdist instance nor a file

   3  ~/.poetry/lib/poetry/inspection/info.py:291 in _from_sdist_file
       289│
       290│             # now this is an unpacked directory we know how to deal with
     → 291│             new_info = cls.from_directory(path=sdist_dir)
       292│
       293│         if not info:

   2  ~/.poetry/lib/poetry/inspection/info.py:541 in from_directory
       539│                         info = cls.from_setup_files(path)
       540│                     else:
     → 541│                         info = cls._pep517_metadata(path)
       542│                 except PackageInfoError:
       543│                     if not info:

   1  ~/.poetry/lib/poetry/inspection/info.py:506 in _pep517_metadata
       504│                     )
       505│                 finally:
     → 506│                     os.chdir(cwd.as_posix())
       507│
       508│         if info:

  RuntimeError

  generator didn't stop after throw()

  at ~/.pyenv/versions/3.7.2/lib/python3.7/contextlib.py:161 in __exit__
      157│                 # by 'except BaseException'.
      158│                 if sys.exc_info()[1] is value:
      159│                     return False
      160│                 raise
    → 161│             raise RuntimeError("generator didn't stop after throw()")
      162│
      163│
      164│ class _AsyncGeneratorContextManager(_GeneratorContextManagerBase,
      165│                                     AbstractAsyncContextManager):
JKARY-M-V80G:svs-alto jkary$
abn commented 3 years ago

@jkary does this happen if you clean and re-install poetry? Or installing poetry via pipx ?

jcassee commented 3 years ago

This happened to me after uninstalling an old version of Poetry (using --uninstall) and then installing again.

Poetry version 1.1.4, Ubuntu 20.04.

Edit: It's when I try to install black that this happens. My other dependencies work fine. If I install black using pip and then add it to poetry everything is fine.

jkary commented 3 years ago

I did a pip uninstall poetry:

JKARY-M-V80G:svs-alto jkary$ pip uninstall poetry
Found existing installation: poetry 1.0.5
Uninstalling poetry-1.0.5:
  Would remove:
    /Users/jkary/.pyenv/versions/3.7.2/bin/poetry
    /Users/jkary/.pyenv/versions/3.7.2/lib/python3.7/site-packages/poetry-1.0.5.dist-info/*
    /Users/jkary/.pyenv/versions/3.7.2/lib/python3.7/site-packages/poetry/*
Proceed (y/n)? y
  Successfully uninstalled poetry-1.0.5

I don't know why I had 1.0.5 as I did a poetry self update to the latest version. This procedure resolved my issue.

Thanks!

brunosavyofs commented 3 years ago

I faced this issue too in 1.1.3 version. I was able to fix it by creating a new virtual environment and reinstalling dependencies.

jwheeler31 commented 3 years ago

As requested in Discord, updating for completeness:

OS version and name: macOS Catalina 10.15.7 (using the bash shell) Poetry version: 1.1.4 Link of a Gist with the contents of your pyproject.toml file: https://gist.github.com/jwheeler31/aa5318f7e9953820f4597fd492035097

Using 1.1.4, I ran poetry add -D mypy (also attempted poetry add mypy for completeness, and received the following error:

Using version ^0.790 for mypy

Updating dependencies
Resolving dependencies... (1.8s)

  RuntimeError

  generator didn't stop after throw()

  at ~/.pyenv/versions/3.8.2/lib/python3.8/contextlib.py:162 in __exit__
      158│                 # by 'except BaseException'.
      159│                 if sys.exc_info()[1] is value:
      160│                     return False
      161│                 raise
    → 162│             raise RuntimeError("generator didn't stop after throw()")
      163│ 
      164│ 
      165│ class _AsyncGeneratorContextManager(_GeneratorContextManagerBase,
      166│                                     AbstractAsyncContextManager):

The expected behavior is for the install to proceed as if we were installing flake8.

abn commented 3 years ago

@jkary @jwheeler31 the below was my attempt at reproducing the issue (removed your path dependency, but otherwise should be identitical. It worked without an issue. So, I suspect the issue is somehow with the environment. The custom installer seems to have issue sin certain scenarios - not sure of all the root causes yet. However, can you perhaps try installing poetry using pipx?

podman run --rm -i --entrypoint bash python:3.7 <<EOF
set -xe
python -m pip install -q poetry
install -d foobar
pushd foobar
cat > pyproject.toml <<TOML
[tool.poetry]
name = "svs-alto"
version = "0.1.0"
description = "Scripts for SVS test bed deployment."
authors = ["Jason Kary <jkary@cisco.com>"]

[tool.poetry.dependencies]
python = "^3.7"
python-xml2dict = "^0.1.1"
jupyter = "^1.0.0"
pandas = "^1.1.0"
openpyxl = "^3.0.4"
"yaml-1.3" = "^0.1.0"
pyyaml = "^5.3.1"
json2yaml = "^1.1.1"
xlrd = "^1.2.0"
jinja2 = "^2.11.2"
ucsmsdk = "^0.9.10"

[tool.poetry.dev-dependencies]
black = "^19.10b0"
pytest = "^6.0.1"

[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"
TOML
poetry install
poetry add ansible
EOF
prokher commented 3 years ago

We experience the same issue with the latest Poetry version 1.1.4. Invoking poetry update isort or just poetry update leads to the same exception as noted above:

>>> poetry update
Updating dependencies
Resolving dependencies... (6.6s)

  RuntimeError

  generator didn't stop after throw()

  at /usr/local/lib/python3.7/contextlib.py:161 in __exit__
      157│                 # by 'except BaseException'.
      158│                 if sys.exc_info()[1] is value:
      159│                     return False
      160│                 raise
    → 161│             raise RuntimeError("generator didn't stop after throw()")
      162│ 
      163│ 
      164│ class _AsyncGeneratorContextManager(_GeneratorContextManagerBase,
      165│                                     AbstractAsyncContextManager):

The same with verbose output:

>>> poetry update -v
Using virtualenv: /pSeven/venv
Updating dependencies
Resolving dependencies... (0.5s)

  Stack trace:

  26  /opt/poetry/.poetry/lib/poetry/_vendor/py3.7/clikit/console_application.py:131 in run
      status_code = command.handle(parsed_args, io)

  25  /opt/poetry/.poetry/lib/poetry/_vendor/py3.7/clikit/api/command/command.py:120 in handle
      status_code = self._do_handle(args, io)

  24  /opt/poetry/.poetry/lib/poetry/_vendor/py3.7/clikit/api/command/command.py:171 in _do_handle
      return getattr(handler, handler_method)(args, io, self)

  23  /opt/poetry/.poetry/lib/poetry/_vendor/py3.7/cleo/commands/command.py:92 in wrap_handle
      return self.handle()

  22  /opt/poetry/.poetry/lib/poetry/console/commands/update.py:47 in handle
      return self._installer.run()

  21  /opt/poetry/.poetry/lib/poetry/installation/installer.py:103 in run
      return self._do_install(local_repo)

  20  /opt/poetry/.poetry/lib/poetry/installation/installer.py:235 in _do_install
      ops = solver.solve(use_latest=self._whitelist)

  19  /opt/poetry/.poetry/lib/poetry/puzzle/solver.py:65 in solve
      packages, depths = self._solve(use_latest=use_latest)

  18  /opt/poetry/.poetry/lib/poetry/puzzle/solver.py:234 in _solve
      self._package, self._provider, locked=locked, use_latest=use_latest

  17  /opt/poetry/.poetry/lib/poetry/mixology/__init__.py:7 in resolve_version
      return solver.solve()

  16  /opt/poetry/.poetry/lib/poetry/mixology/version_solver.py:84 in solve
      next = self._choose_package_version()

  15  /opt/poetry/.poetry/lib/poetry/mixology/version_solver.py:397 in _choose_package_version
      version = self._provider.complete_package(version)

  14  /opt/poetry/.poetry/lib/poetry/puzzle/provider.py:437 in complete_package
      repository=package.dependency.source_name,

  13  /opt/poetry/.poetry/lib/poetry/repositories/pool.py:135 in package
      package = repo.package(name, version, extras=extras)

  12  /opt/poetry/.poetry/lib/poetry/repositories/pypi_repository.py:158 in package
      return self.get_release_info(name, version).to_package(name=name, extras=extras)

  11  /opt/poetry/.poetry/lib/poetry/repositories/pypi_repository.py:224 in get_release_info
      "{}:{}".format(name, version), lambda: self._get_release_info(name, version)

  10  /opt/poetry/.poetry/lib/poetry/_vendor/py3.7/cachy/repository.py:174 in remember_forever
      val = value(callback)

   9  /opt/poetry/.poetry/lib/poetry/_vendor/py3.7/cachy/helpers.py:6 in value
      return val()

   8  /opt/poetry/.poetry/lib/poetry/repositories/pypi_repository.py:224 in <lambda>
      "{}:{}".format(name, version), lambda: self._get_release_info(name, version)

   7  /opt/poetry/.poetry/lib/poetry/repositories/pypi_repository.py:304 in _get_release_info
      info = self._get_info_from_urls(urls)

   6  /opt/poetry/.poetry/lib/poetry/repositories/pypi_repository.py:419 in _get_info_from_urls
      return self._get_info_from_sdist(urls["sdist"][0])

   5  /opt/poetry/.poetry/lib/poetry/repositories/pypi_repository.py:447 in _get_info_from_sdist
      return PackageInfo.from_sdist(filepath)

   4  /opt/poetry/.poetry/lib/poetry/inspection/info.py:561 in from_sdist
      return cls._from_sdist_file(path=path)

   3  /opt/poetry/.poetry/lib/poetry/inspection/info.py:291 in _from_sdist_file
      new_info = cls.from_directory(path=sdist_dir)

   2  /opt/poetry/.poetry/lib/poetry/inspection/info.py:541 in from_directory
      info = cls._pep517_metadata(path)

   1  /opt/poetry/.poetry/lib/poetry/inspection/info.py:506 in _pep517_metadata
      os.chdir(cwd.as_posix())

  RuntimeError

  generator didn't stop after throw()

  at /usr/local/lib/python3.7/contextlib.py:161 in __exit__
      157│                 # by 'except BaseException'.
      158│                 if sys.exc_info()[1] is value:
      159│                     return False
      160│                 raise
    → 161│             raise RuntimeError("generator didn't stop after throw()")
      162│ 
      163│ 
      164│ class _AsyncGeneratorContextManager(_GeneratorContextManagerBase,
      165│                                     AbstractAsyncContextManager):
jwheeler31 commented 3 years ago

@abn, apologies for the late response. That issue occurred when following the instructions verbatim on the homepage. Per @sinoroc, I uninstalled per the homepage instructions followed by an install via pipx. Everything seems to function properly after that.

bitphage commented 3 years ago

Same issue here, with poetry 1.1.4 installed via get-poetry.py script

% poetry add ruamel.yaml
Using version ^0.16.12 for ruamel.yaml                                    

Updating dependencies
Resolving dependencies... (0.8s)

  RuntimeError

  generator didn't stop after throw()

  at /usr/lib/python3.7/contextlib.py:161 in __exit__
      157│                 # by 'except BaseException'.
      158│                 if sys.exc_info()[1] is value:
      159│                     return False
      160│                 raise
    → 161│             raise RuntimeError("generator didn't stop after throw()")
      162│ 
      163│ 
      164│ class _AsyncGeneratorContextManager(_GeneratorContextManagerBase,
      165│                                     AbstractAsyncContextManager):

Update: in the same environment, for example poetry add boto3 works fine.

kummerer94 commented 3 years ago

Same problem here trying to run poetry add for a private package on our internal repository server.

buriy commented 3 years ago

Needs to reinstall poetry to fix.

bitphage commented 3 years ago

I've debugged this issue a bit and it appears that bundled virtualenv package doesn't have a seed.via_app_data module. Exception from contextlib looks like a bug in contextlib itself, not sure.

> /home/vvk/.poetry/lib/poetry/inspection/info.py(462)_pep517_metadata()
-> EnvManager.build_venv(venv_dir.as_posix())
(Pdb)
ModuleNotFoundError: No module named 'virtualenv.seed.via_app_data'
(Pdb) import traceback
(Pdb) traceback.print_exc()
Traceback (most recent call last):
  File "/home/vvk/.poetry/lib/poetry/_vendor/py3.7/poetry/core/utils/helpers.py", line 41, in temporary_directory
    yield name
  File "/home/vvk/.poetry/lib/poetry/inspection/info.py", line 462, in _pep517_metadata
    EnvManager.build_venv(venv_dir.as_posix())
  File "/home/vvk/.poetry/lib/poetry/utils/env.py", line 808, in build_venv
    str(path),
  File "/home/vvk/.poetry/lib/poetry/_vendor/py3.7/virtualenv/run/__init__.py", line 26, in cli_run
    of_session = session_via_cli(args, options, setup_logging)
  File "/home/vvk/.poetry/lib/poetry/_vendor/py3.7/virtualenv/run/__init__.py", line 42, in session_via_cli
    parser, elements = build_parser(args, options, setup_logging)
  File "/home/vvk/.poetry/lib/poetry/_vendor/py3.7/virtualenv/run/__init__.py", line 69, in build_parser
    SeederSelector(interpreter, parser),
  File "/home/vvk/.poetry/lib/poetry/_vendor/py3.7/virtualenv/run/plugin/seeders.py", line 8, in __init__
    possible = self.options("virtualenv.seed")
  File "/home/vvk/.poetry/lib/poetry/_vendor/py3.7/virtualenv/run/plugin/base.py", line 39, in options
    cls._OPTIONS = cls.entry_points_for(key)
  File "/home/vvk/.poetry/lib/poetry/_vendor/py3.7/virtualenv/run/plugin/base.py", line 18, in entry_points_for
    return OrderedDict((e.name, e.load()) for e in cls.entry_points().get(key, {}))
  File "/home/vvk/.poetry/lib/poetry/_vendor/py3.7/virtualenv/run/plugin/base.py", line 18, in <genexpr>
    return OrderedDict((e.name, e.load()) for e in cls.entry_points().get(key, {}))
  File "/home/vvk/.poetry/lib/poetry/_vendor/py3.7/importlib_metadata/__init__.py", line 105, in load
    module = import_module(match.group('module'))
  File "/usr/lib/python3.7/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 965, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'virtualenv.seed.via_app_data'
% cat /home/vvk/.poetry/lib/poetry/_vendor/py3.7/virtualenv/version.py 
from __future__ import  unicode_literals;

__version__ = "20.0.31"
% ls -1 /home/vvk/.poetry/lib/poetry/_vendor/py3.7/virtualenv/seed/
__init__.py
__pycache__
embed
seeder.py
wheels
nickineering commented 3 years ago

Was getting pretty frustrated by this but then I deleted my poetry.lock and recreated my virtual environment. Everything works fine now. I suppose I had some very outdated dependency in the lock file.

wotori commented 3 years ago

nothing helps me, getting this error again and again

Updating dependencies
Resolving dependencies... (10.2s)

  RuntimeError

  generator didn't stop after throw()

  at /usr/lib/python3.8/contextlib.py:162 in __exit__
      158│                 # by 'except BaseException'.
      159│                 if sys.exc_info()[1] is value:
      160│                     return False
      161│                 raise
    → 162│             raise RuntimeError("generator didn't stop after throw()")
      163│ 
      164│ 
      165│ class _AsyncGeneratorContextManager(_GeneratorContextManagerBase,
      166│                                     AbstractAsyncContextManager):
wotori commented 3 years ago

nothing helps me, getting this error again and again

Updating dependencies
Resolving dependencies... (10.2s)

  RuntimeError

  generator didn't stop after throw()

  at /usr/lib/python3.8/contextlib.py:162 in __exit__
      158│                 # by 'except BaseException'.
      159│                 if sys.exc_info()[1] is value:
      160│                     return False
      161│                 raise
    → 162│             raise RuntimeError("generator didn't stop after throw()")
      163│ 
      164│ 
      165│ class _AsyncGeneratorContextManager(_GeneratorContextManagerBase,
      166│                                     AbstractAsyncContextManager):

somewhy even when venv was activated global command was pointed to local version of poetry, non installd to venv virtual. I removed global poetry first and then double checked with 'which poetry' command that it uses the exactly version in current venv then everething started working as expected.

p.s. yes, as told above, python -m poetry install should do the trick localy in venv

JKatzwinkel commented 2 years ago

Reinstalling poetry and/or running poetry add from inside of its own venv (the one entered via poetry shell) solved this issue for me.

damienallen commented 2 years ago

As recommended by a few folks here, updating my (global) poetry install fixed the issue. In my case this was simply the command poetry self update as described in the docs.

neersighted commented 1 year ago

This does not reproduce on any recent version -- closing as such.

github-actions[bot] commented 6 months ago

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.