poetry: Poetry add failing with RuntimeError
- 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: 19.6.0 Darwin Kernel Version 19.6.0: Mon Aug 31 22:12:52 PDT 2020; root:xnu-6153.141.2~1/RELEASE_X86_64 x86_64
- Poetry version: 1.1.3
- Link of a Gist with the contents of your pyproject.toml file: https://gist.github.com/jkary/0d699c7fbfdb340a5448845b69a3d0c2
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$
About this issue
- Original URL
- State: closed
- Created 4 years ago
- Reactions: 8
- Comments: 19 (3 by maintainers)
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 venvSame issue here, with poetry 1.1.4 installed via
get-poetry.py
scriptUpdate: in the same environment, for example
poetry add boto3
works fine.