Ugly Portage error - AssertionError: setcpv recursion detected
My fellow Gentooers, I may have finally met my match with this Portage error. Haven't had to do anything except use the noggin and the handbook to keep Gentoo going... until now.
Clearly this isn't a widespread issue. It seems potentially similar to Bug 966832, but I don't have any odd syntax like that in my package.accept_keywords. Maybe there is something else wrong in my configs somewhere, or maybe even an issue with python.
Rolling back to portage 3.0.69.3-r2 from 3.0.72 fixes the issue for me for now. But since it isn't a widespread issue, I am starting to wonder if there is something else going on with my setup, not just portage.
~ $ sudo emerge -avuDN @world
These are the packages that would be merged, in order:
Calculating dependencies... done! Dependency resolution took 4.27 s.
Traceback (most recent call last): File "/usr/lib/python-exec/python3.13/emerge", line 51, in main retval = emerge_main() File "/usr/lib/python3.13/site-packages/_emerge/main.py", line 1314, in emerge_main return run_action(emerge_config) File "/usr/lib/python3.13/site-packages/_emerge/actions.py", line 4114, in run_action retval = action_build(emerge_config, spinner=spinner) File "/usr/lib/python3.13/site-packages/_emerge/actions.py", line 416, in action_build success, mydepgraph, favorites = backtrack_depgraph( ~~~~~~~~~~~~~~~~~~^ settings, trees, myopts, myparams, myaction, myfiles, spinner ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/usr/lib/python3.13/site-packages/_emerge/depgraph.py", line 11852, in backtrack_depgraph success, mydepgraph, favorites, backtracked, max_retries = _backtrack_depgraph( ~~~~~~~~~~~~~~~~~~~^ settings, trees, myopts, myparams, myaction, myfiles, spinner ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/usr/lib/python3.13/site-packages/_emerge/depgraph.py", line 11911, in _backtrack_depgraph success, favorites = mydepgraph.select_files(myfiles) ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^ File "/usr/lib/python3.13/site-packages/_emerge/depgraph.py", line 4833, in select_files return self._select_files(args) ~~~~~~~~~~~~~~~~~~^^^^^^ File "/usr/lib/python3.13/site-packages/_emerge/depgraph.py", line 5279, in _select_files return self._resolve(myfavorites) ~~~~~~~~~~~~~^^^^^^^^^^^^^ File "/usr/lib/python3.13/site-packages/_emerge/depgraph.py", line 5477, in _resolve if not self._create_graph(): ~~~~~~~~~~~~~~~~~~^^ File "/usr/lib/python3.13/site-packages/_emerge/depgraph.py", line 3079, in _create_graph if not self._add_pkg_deps(dep, allow_unsatisfied=allow_unsatisfied): ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.13/site-packages/_emerge/depgraph.py", line 4222, in _add_pkg_deps if not self._add_pkg_dep_string( ~~~~~~~~~~~~~~~~~~~~~~~~^ pkg, dep_root, dep_priority, dep_string, allow_unsatisfied ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ): ^ File "/usr/lib/python3.13/site-packages/_emerge/depgraph.py", line 4239, in _add_pkg_dep_string return self._wrapped_add_pkg_dep_string( ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ pkg, dep_root, dep_priority, dep_string, allow_unsatisfied ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/usr/lib/python3.13/site-packages/_emerge/depgraph.py", line 4343, in _wrapped_add_pkg_dep_string for atom, child in self._minimize_children( ~~~~~~~~~~~~~~~~~~~~~~~^ pkg, dep_priority, root_config, selected_atoms[pkg] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ): ^ File "/usr/lib/python3.13/site-packages/_emerge/depgraph.py", line 4587, in _minimize_children dep_pkg, existing_node = self._select_package( ~~~~~~~~~~~~~~~~~~~~^ root_config.root, atom, parent=parent ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/usr/lib/python3.13/site-packages/_emerge/depgraph.py", line 7046, in _select_pkg_highest_available ret = self._select_pkg_highest_available_imp( root, atom, onlydeps=onlydeps, parent=parent ) File "/usr/lib/python3.13/site-packages/_emerge/depgraph.py", line 7308, in _select_pkg_highest_available_imp pkg, existing = self._wrapped_select_pkg_highest_available_imp( ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ root, atom, onlydeps=onlydeps, parent=parent ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/usr/lib/python3.13/site-packages/_emerge/depgraph.py", line 7657, in _wrapped_select_pkg_highest_available_imp for pkg in self._iter_match_pkgs( ~~~~~~~~~~~~~~~~~~~~~^ root_config, ^^^^^^^^^^^^ ...<2 lines>... onlydeps=onlydeps, ^^^^^^^^^^^^^^^^^^ ): ^ File "/usr/lib/python3.13/site-packages/_emerge/depgraph.py", line 6935, in _iter_match_pkgs_atom pkg = self._pkg( cpv, ...<4 lines>... myrepo=getattr(cpv, "repo", None), ) File "/usr/lib/python3.13/site-packages/_emerge/depgraph.py", line 8616, in _pkg not self._pkg_visibility_check(pkg) ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^ File "/usr/lib/python3.13/site-packages/_emerge/depgraph.py", line 7356, in _pkg_visibility_check if pkg.visible: ^^^^^^^^^^^ File "/usr/lib/python3.13/site-packages/_emerge/Package.py", line 225, in visible self._visible = self._eval_visibility(self.masks) ^^^^^^^^^^ File "/usr/lib/python3.13/site-packages/_emerge/Package.py", line 219, in masks self._masks = self._eval_masks() ~~~~~~~~~~~~~~~~^^ File "/usr/lib/python3.13/site-packages/_emerge/Package.py", line 464, in _eval_masks missing_licenses = settings._getMissingLicenses(self.cpv, self._metadata) File "/usr/lib/python3.13/site-packages/portage/package/ebuild/config.py", line 2553, in _getMissingLicenses metadata["USE"], ~~~~~~~~^^^^^^^ File "/usr/lib/python3.13/site-packages/_emerge/Package.py", line 903, in getitem v = self._pkg._init_use() File "/usr/lib/python3.13/site-packages/_emerge/Package.py", line 704, in _init_use use_str = self._get_pkgsettings()["PORTAGE_USE"] ~~~~~~~~~~~~~~~~~~~~~^^ File "/usr/lib/python3.13/site-packages/_emerge/Package.py", line 681, in _get_pkgsettings pkgsettings.setcpv(self) ~~~~~~~~~~~~~~~~~~^^^^^^ File "/usr/lib/python3.13/site-packages/portage/package/ebuild/config.py", line 1784, in wrapper return f(self, *args, **kwargs) File "/usr/lib/python3.13/site-packages/portage/package/ebuild/config.py", line 1901, in setcpv stable = self._isStable(cpv_slot) if hasattr(cpv_slot, "_metadata") else None ~~~~~~~~~~~~~~^^^^^^^^^^ File "/usr/lib/python3.13/site-packages/portage/package/ebuild/config.py", line 2459, in _isStable return self._keywords_manager.isStable( ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ pkg, ^^^^ self.get("ACCEPT_KEYWORDS", ""), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ self.configdict["backupenv"].get("ACCEPT_KEYWORDS", ""), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/usr/lib/python3.13/site-packages/portage/package/ebuild/_config/KeywordsManager.py", line 137, in isStable unmaskgroups = self.getPKeywords(pkg, None, None, global_accept_keywords) File "/usr/lib/python3.13/site-packages/portage/package/ebuild/_config/KeywordsManager.py", line 349, in getPKeywords pkg_accept_keywords = ordered_by_atom_specificity(pkgdict, cpv) File "/usr/lib/python3.13/site-packages/portage/package/ebuild/_config/helper.py", line 36, in ordered_by_atom_specificity bestmatch = best_match_to_list(pkg, keys) File "/usr/lib/python3.13/site-packages/portage/dep/init.py", line 2415, in best_match_to_list for x in match_to_list(mypkg, mylist): ~~~~~~~~~~~~~^^^^^^^^^^^^^^^ File "/usr/lib/python3.13/site-packages/portage/dep/init.py", line 2375, in match_to_list if not (x in matches or matches_add(x)) and match_from_list(x, pkgs) ~~~~~~~~~~~~~~~^^^^^^^^^ File "/usr/lib/python3.13/site-packages/portage/dep/init.py", line 2702, in match_from_list use = getattr(x, "use", None) File "/usr/lib/python3.13/site-packages/_emerge/Package.py", line 676, in use self._init_use() ~~~~~~~~~~~~~~^^ File "/usr/lib/python3.13/site-packages/_emerge/Package.py", line 704, in _init_use use_str = self._get_pkgsettings()["PORTAGE_USE"] ~~~~~~~~~~~~~~~~~~~~~^^ File "/usr/lib/python3.13/site-packages/_emerge/Package.py", line 681, in _get_pkgsettings pkgsettings.setcpv(self) ~~~~~~~~~~~~~~~~~~^^^^^^ File "/usr/lib/python3.13/site-packages/portage/package/ebuild/config.py", line 1781, in wrapper raise AssertionError("setcpv recursion detected") AssertionError: setcpv recursion detected
Posted Dec 6, 2025, 6:28 PM UTC