Running command python setup.py egg_info running egg_info creating /private/var/folders/k7/l2cj2kv14x9dg7ljk_p20y7w0000gn/T/pip-pip-egg-info-u70tbd8u/SQLAlchemy.egg-info writing /private/var/folders/k7/l2cj2kv14x9dg7ljk_p20y7w0000gn/T/pip-pip-egg-info-u70tbd8u/SQLAlchemy.egg-info/PKG-INFO writing dependency_links to /private/var/folders/k7/l2cj2kv14x9dg7ljk_p20y7w0000gn/T/pip-pip-egg-info-u70tbd8u/SQLAlchemy.egg-info/dependency_links.txt writing requirements to /private/var/folders/k7/l2cj2kv14x9dg7ljk_p20y7w0000gn/T/pip-pip-egg-info-u70tbd8u/SQLAlchemy.egg-info/requires.txt writing top-level names to /private/var/folders/k7/l2cj2kv14x9dg7ljk_p20y7w0000gn/T/pip-pip-egg-info-u70tbd8u/SQLAlchemy.egg-info/top_level.txt writing manifest file '/private/var/folders/k7/l2cj2kv14x9dg7ljk_p20y7w0000gn/T/pip-pip-egg-info-u70tbd8u/SQLAlchemy.egg-info/SOURCES.txt' reading manifest file '/private/var/folders/k7/l2cj2kv14x9dg7ljk_p20y7w0000gn/T/pip-pip-egg-info-u70tbd8u/SQLAlchemy.egg-info/SOURCES.txt' reading manifest template 'MANIFEST.in' no previously-included directories found matching 'doc/build/output' warning: no previously-included files found matching 'pyproject.toml' adding license file 'LICENSE' writing manifest file '/private/var/folders/k7/l2cj2kv14x9dg7ljk_p20y7w0000gn/T/pip-pip-egg-info-u70tbd8u/SQLAlchemy.egg-info/SOURCES.txt' ╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮ │ /Users/edgarramirez/Code/repro/pip-24.1-sqlalchemy/.venv/lib/python3.8/site-packages/pip/_vendor │ │ /pkg_resources/__init__.py:2791 in requires │ │ │ │ 2788 │ │ deps.extend(dm.get(None, ())) │ │ 2789 │ │ for ext in extras: │ │ 2790 │ │ │ try: │ │ ❱ 2791 │ │ │ │ deps.extend(dm[safe_extra(ext)]) │ │ 2792 │ │ │ except KeyError as e: │ │ 2793 │ │ │ │ raise UnknownExtra( │ │ 2794 │ │ │ │ │ "%s has no such extra feature %r" % (self, ext) │ │ │ │ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │ │ │ deps = [Requirement.parse('psycopg2>=2.7'), Requirement.parse('cx_oracle>=7')] │ │ │ │ dm = { │ │ │ │ │ None: [], │ │ │ │ │ 'aiomysql': [ │ │ │ │ │ │ Requirement.parse('greenlet!=0.4.17'), │ │ │ │ │ │ Requirement.parse('aiomysql>=0.2.0') │ │ │ │ │ ], │ │ │ │ │ 'aiosqlite': [ │ │ │ │ │ │ Requirement.parse('typing_extensions!=3.10.0.1'), │ │ │ │ │ │ Requirement.parse('greenlet!=0.4.17'), │ │ │ │ │ │ Requirement.parse('aiosqlite') │ │ │ │ │ ], │ │ │ │ │ 'asyncio': [Requirement.parse('greenlet!=0.4.17')], │ │ │ │ │ 'asyncmy': [ │ │ │ │ │ │ Requirement.parse('greenlet!=0.4.17'), │ │ │ │ │ │ Requirement.parse('asyncmy!=0.2.4,>=0.2.3') │ │ │ │ │ ], │ │ │ │ │ 'mariadb_connector': [Requirement.parse('mariadb!=1.1.2,>=1.0.1')], │ │ │ │ │ 'mssql': [Requirement.parse('pyodbc')], │ │ │ │ │ 'mssql_pymssql': [Requirement.parse('pymssql')], │ │ │ │ │ 'mssql_pyodbc': [Requirement.parse('pyodbc')], │ │ │ │ │ 'mypy': [ │ │ │ │ │ │ Requirement.parse('sqlalchemy2-stubs'), │ │ │ │ │ │ Requirement.parse('mypy>=0.910') │ │ │ │ │ ], │ │ │ │ │ ... +10 │ │ │ │ } │ │ │ │ ext = 'mariadb-connector' │ │ │ │ extras = [ │ │ │ │ │ 'postgresql', │ │ │ │ │ 'oracle', │ │ │ │ │ 'mariadb-connector', │ │ │ │ │ 'mssql-pymssql', │ │ │ │ │ 'asyncio', │ │ │ │ │ 'postgresql-psycopg2binary', │ │ │ │ │ 'mysql-connector', │ │ │ │ │ 'postgresql-psycopg2cffi', │ │ │ │ │ 'pymysql', │ │ │ │ │ 'mysql', │ │ │ │ │ ... +9 │ │ │ │ ] │ │ │ │ self = SQLAlchemy [unknown version] │ │ │ │ (/private/var/folders/k7/l2cj2kv14x9dg7ljk_p20y7w0000gn/T/pip-pip-egg-info-u70tbd8… │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ KeyError: 'mariadb-connector' The above exception was the direct cause of the following exception: ╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮ │ /Users/edgarramirez/Code/repro/pip-24.1-sqlalchemy/.venv/bin/pip:8 in │ │ │ │ 5 from pip._internal.cli.main import main │ │ 6 if __name__ == '__main__': │ │ 7 │ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) │ │ ❱ 8 │ sys.exit(main()) │ │ 9 │ │ │ │ ╭────────────────────────────────────────── locals ──────────────────────────────────────────╮ │ │ │ main = │ │ │ │ re = │ │ │ │ sys = │ │ │ ╰────────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ │ /Users/edgarramirez/Code/repro/pip-24.1-sqlalchemy/.venv/lib/python3.8/site-packages/pip/_intern │ │ al/cli/main.py:80 in main │ │ │ │ 77 │ │ logger.debug("Ignoring error %s when setting locale", e) │ │ 78 │ command = create_command(cmd_name, isolated=("--isolated" in cmd_args)) │ │ 79 │ │ │ ❱ 80 │ return command.main(cmd_args) │ │ 81 │ │ │ │ ╭─────────────────────────────────────── locals ────────────────────────────────────────╮ │ │ │ args = ['install', '--no-cache-dir', '--debug', '-vvv', '-r', 'requirements.txt'] │ │ │ │ cmd_args = ['--no-cache-dir', '--debug', '-vvv', '-r', 'requirements.txt'] │ │ │ │ cmd_name = 'install' │ │ │ │ command = │ │ │ ╰───────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ │ /Users/edgarramirez/Code/repro/pip-24.1-sqlalchemy/.venv/lib/python3.8/site-packages/pip/_intern │ │ al/cli/base_command.py:100 in main │ │ │ │ 97 │ def main(self, args: List[str]) -> int: │ │ 98 │ │ try: │ │ 99 │ │ │ with self.main_context(): │ │ ❱ 100 │ │ │ │ return self._main(args) │ │ 101 │ │ finally: │ │ 102 │ │ │ logging.shutdown() │ │ 103 │ │ │ │ ╭─────────────────────────────────── locals ───────────────────────────────────╮ │ │ │ args = ['--no-cache-dir', '--debug', '-vvv', '-r', 'requirements.txt'] │ │ │ │ self = │ │ │ ╰──────────────────────────────────────────────────────────────────────────────╯ │ │ │ │ /Users/edgarramirez/Code/repro/pip-24.1-sqlalchemy/.venv/lib/python3.8/site-packages/pip/_intern │ │ al/cli/base_command.py:232 in _main │ │ │ │ 229 │ │ │ else: │ │ 230 │ │ │ │ run = self.run │ │ 231 │ │ │ │ rich_traceback.install(show_locals=True) │ │ ❱ 232 │ │ │ return run(options, args) │ │ 233 │ │ finally: │ │ 234 │ │ │ self.handle_pip_version_check(options) │ │ 235 │ │ │ │ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │ │ │ always_enabled_features = set() │ │ │ │ args = [] │ │ │ │ intercepts_unhandled_exc = .intercepts_unhandled_exc at │ │ │ │ 0x10257a160> │ │ │ │ level_number = 10 │ │ │ │ options = │ │ │ │ run = .wrapper of │ │ │ │ > │ │ │ │ self = │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ │ /Users/edgarramirez/Code/repro/pip-24.1-sqlalchemy/.venv/lib/python3.8/site-packages/pip/_intern │ │ al/cli/req_command.py:67 in wrapper │ │ │ │ 64 │ │ │ configure_tempdir_registry(self.tempdir_registry) │ │ 65 │ │ │ │ 66 │ │ try: │ │ ❱ 67 │ │ │ return func(self, options, args) │ │ 68 │ │ except PreviousBuildDirError: │ │ 69 │ │ │ # This kind of conflict can occur when the user passes an explicit │ │ 70 │ │ │ # build directory with a pre-existing folder. In that case we do │ │ │ │ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │ │ │ args = [] │ │ │ │ configure_tempdir_registry = .configure_tempdir_registry at │ │ │ │ 0x1047235e0> │ │ │ │ func = │ │ │ │ options = │ │ │ │ self = │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ │ /Users/edgarramirez/Code/repro/pip-24.1-sqlalchemy/.venv/lib/python3.8/site-packages/pip/_intern │ │ al/commands/install.py:377 in run │ │ │ │ 374 │ │ │ │ │ 375 │ │ │ self.trace_basic_info(finder) │ │ 376 │ │ │ │ │ ❱ 377 │ │ │ requirement_set = resolver.resolve( │ │ 378 │ │ │ │ reqs, check_supported_wheels=not options.target_dir │ │ 379 │ │ │ ) │ │ 380 │ │ │ │ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │ │ │ args = [] │ │ │ │ build_tracker = │ │ │ │ directory = │ │ │ │ global_options = [] │ │ │ │ installing_into_current_environment = True │ │ │ │ options = │ │ │ │ preparer = │ │ │ │ req = │ │ │ │ reqs = [ │ │ │ │ │ │ │ │ │ ] │ │ │ │ resolver = │ │ │ │ self = │ │ │ │ session = │ │ │ │ target_python = │ │ │ │ target_temp_dir = None │ │ │ │ target_temp_dir_path = None │ │ │ │ upgrade_strategy = 'to-satisfy-only' │ │ │ │ wheel_cache = │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ │ /Users/edgarramirez/Code/repro/pip-24.1-sqlalchemy/.venv/lib/python3.8/site-packages/pip/_intern │ │ al/resolution/resolvelib/resolver.py:95 in resolve │ │ │ │ 92 │ │ │ │ 93 │ │ try: │ │ 94 │ │ │ limit_how_complex_resolution_can_be = 200000 │ │ ❱ 95 │ │ │ result = self._result = resolver.resolve( │ │ 96 │ │ │ │ collected.requirements, max_rounds=limit_how_complex_resolution_can_be │ │ 97 │ │ │ ) │ │ 98 │ │ │ │ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │ │ │ check_supported_wheels = True │ │ │ │ collected = CollectedRootRequirements( │ │ │ │ │ requirements=[ │ │ │ │ │ │ SpecifierRequirement('sqlalchemy==1.4.*') │ │ │ │ │ ], │ │ │ │ │ constraints={}, │ │ │ │ │ user_requested={'sqlalchemy': 0} │ │ │ │ ) │ │ │ │ limit_how_complex_resolution_can_be = 200000 │ │ │ │ provider = │ │ │ │ reporter = │ │ │ │ resolver = │ │ │ │ root_reqs = [ │ │ │ │ │ │ │ │ │ ] │ │ │ │ self = │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ │ /Users/edgarramirez/Code/repro/pip-24.1-sqlalchemy/.venv/lib/python3.8/site-packages/pip/_vendor │ │ /resolvelib/resolvers.py:546 in resolve │ │ │ │ 543 │ │ │ `max_rounds` argument. │ │ 544 │ │ """ │ │ 545 │ │ resolution = Resolution(self.provider, self.reporter) │ │ ❱ 546 │ │ state = resolution.resolve(requirements, max_rounds=max_rounds) │ │ 547 │ │ return _build_result(state) │ │ 548 │ │ │ │ ╭────────────────────────────────────── locals ──────────────────────────────────────╮ │ │ │ max_rounds = 200000 │ │ │ │ requirements = [SpecifierRequirement('sqlalchemy==1.4.*')] │ │ │ │ resolution = │ │ │ │ self = │ │ │ ╰────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ │ /Users/edgarramirez/Code/repro/pip-24.1-sqlalchemy/.venv/lib/python3.8/site-packages/pip/_vendor │ │ /resolvelib/resolvers.py:397 in resolve │ │ │ │ 394 │ │ ] │ │ 395 │ │ for r in requirements: │ │ 396 │ │ │ try: │ │ ❱ 397 │ │ │ │ self._add_to_criteria(self.state.criteria, r, parent=None) │ │ 398 │ │ │ except RequirementsConflicted as e: │ │ 399 │ │ │ │ raise ResolutionImpossible(e.criterion.information) │ │ 400 │ │ │ │ ╭────────────────────────────────────── locals ──────────────────────────────────────╮ │ │ │ max_rounds = 200000 │ │ │ │ r = SpecifierRequirement('sqlalchemy==1.4.*') │ │ │ │ requirements = [SpecifierRequirement('sqlalchemy==1.4.*')] │ │ │ │ self = │ │ │ ╰────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ │ /Users/edgarramirez/Code/repro/pip-24.1-sqlalchemy/.venv/lib/python3.8/site-packages/pip/_vendor │ │ /resolvelib/resolvers.py:173 in _add_to_criteria │ │ │ │ 170 │ │ │ information=information, │ │ 171 │ │ │ incompatibilities=incompatibilities, │ │ 172 │ │ ) │ │ ❱ 173 │ │ if not criterion.candidates: │ │ 174 │ │ │ raise RequirementsConflicted(criterion) │ │ 175 │ │ criteria[identifier] = criterion │ │ 176 │ │ │ │ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │ │ │ criteria = {} │ │ │ │ criterion = Criterion((SpecifierRequirement('sqlalchemy==1.4.*'), via=None)) │ │ │ │ identifier = 'sqlalchemy' │ │ │ │ incompatibilities = [] │ │ │ │ information = [ │ │ │ │ │ RequirementInformation( │ │ │ │ │ │ requirement=SpecifierRequirement('sqlalchemy==1.4.*'), │ │ │ │ │ │ parent=None │ │ │ │ │ ) │ │ │ │ ] │ │ │ │ matches = │ │ │ │ parent = None │ │ │ │ requirement = SpecifierRequirement('sqlalchemy==1.4.*') │ │ │ │ self = │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ │ /Users/edgarramirez/Code/repro/pip-24.1-sqlalchemy/.venv/lib/python3.8/site-packages/pip/_vendor │ │ /resolvelib/structs.py:156 in __bool__ │ │ │ │ 153 │ │ return "{}({})".format(type(self).__name__, self._sequence) │ │ 154 │ │ │ 155 │ def __bool__(self): │ │ ❱ 156 │ │ return bool(self._sequence) │ │ 157 │ │ │ 158 │ __nonzero__ = __bool__ # XXX: Python 2. │ │ 159 │ │ │ │ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │ │ │ self = _SequenceIterableView() │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ │ /Users/edgarramirez/Code/repro/pip-24.1-sqlalchemy/.venv/lib/python3.8/site-packages/pip/_intern │ │ al/resolution/resolvelib/found_candidates.py:174 in __bool__ │ │ │ │ 171 │ def __bool__(self) -> bool: │ │ 172 │ │ if self._prefers_installed and self._installed: │ │ 173 │ │ │ return True │ │ ❱ 174 │ │ return any(self) │ │ 175 │ │ │ │ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │ │ │ self = │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ │ /Users/edgarramirez/Code/repro/pip-24.1-sqlalchemy/.venv/lib/python3.8/site-packages/pip/_intern │ │ al/resolution/resolvelib/found_candidates.py:162 in │ │ │ │ 159 │ │ │ iterator = _iter_built_with_prepended(self._installed, infos) │ │ 160 │ │ else: │ │ 161 │ │ │ iterator = _iter_built_with_inserted(self._installed, infos) │ │ ❱ 162 │ │ return (c for c in iterator if id(c) not in self._incompatible_ids) │ │ 163 │ │ │ 164 │ def __len__(self) -> int: │ │ 165 │ │ # Implemented to satisfy the ABC check. This is not needed by the │ │ │ │ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │ │ │ .0 = │ │ │ │ self = │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ │ /Users/edgarramirez/Code/repro/pip-24.1-sqlalchemy/.venv/lib/python3.8/site-packages/pip/_intern │ │ al/resolution/resolvelib/found_candidates.py:53 in _iter_built │ │ │ │ 50 │ │ if version in versions_found: │ │ 51 │ │ │ continue │ │ 52 │ │ try: │ │ ❱ 53 │ │ │ candidate = func() │ │ 54 │ │ except MetadataInvalid as e: │ │ 55 │ │ │ logger.warning( │ │ 56 │ │ │ │ "Ignoring version %s of %s since it has invalid metadata:\n" │ │ │ │ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │ │ │ func = functools.partial(>, link==2.7)>, │ │ │ │ extras=frozenset(), template=, name='sqlalchemy', │ │ │ │ version=) │ │ │ │ infos = .iter_index_candidate_infos at │ │ │ │ 0x105b29900> │ │ │ │ version = │ │ │ │ versions_found = set() │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ │ /Users/edgarramirez/Code/repro/pip-24.1-sqlalchemy/.venv/lib/python3.8/site-packages/pip/_intern │ │ al/resolution/resolvelib/factory.py:185 in _make_candidate_from_link │ │ │ │ 182 │ │ name: Optional[NormalizedName], │ │ 183 │ │ version: Optional[Version], │ │ 184 │ ) -> Optional[Candidate]: │ │ ❱ 185 │ │ base: Optional[BaseCandidate] = self._make_base_candidate_from_link( │ │ 186 │ │ │ link, template, name, version │ │ 187 │ │ ) │ │ 188 │ │ if not extras or base is None: │ │ │ │ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │ │ │ extras = frozenset() │ │ │ │ link = =2.7)> │ │ │ │ name = 'sqlalchemy' │ │ │ │ self = │ │ │ │ template = │ │ │ │ version = │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ │ /Users/edgarramirez/Code/repro/pip-24.1-sqlalchemy/.venv/lib/python3.8/site-packages/pip/_intern │ │ al/resolution/resolvelib/factory.py:231 in _make_base_candidate_from_link │ │ │ │ 228 │ │ else: │ │ 229 │ │ │ if link not in self._link_candidate_cache: │ │ 230 │ │ │ │ try: │ │ ❱ 231 │ │ │ │ │ self._link_candidate_cache[link] = LinkCandidate( │ │ 232 │ │ │ │ │ │ link, │ │ 233 │ │ │ │ │ │ template, │ │ 234 │ │ │ │ │ │ factory=self, │ │ │ │ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │ │ │ link = =2.7)> │ │ │ │ name = 'sqlalchemy' │ │ │ │ self = │ │ │ │ template = │ │ │ │ version = │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ │ /Users/edgarramirez/Code/repro/pip-24.1-sqlalchemy/.venv/lib/python3.8/site-packages/pip/_intern │ │ al/resolution/resolvelib/candidates.py:303 in __init__ │ │ │ │ 300 │ │ │ │ │ source_link, link_is_in_wheel_cache=cache_entry.persistent │ │ 301 │ │ │ │ ) │ │ 302 │ │ │ │ ❱ 303 │ │ super().__init__( │ │ 304 │ │ │ link=link, │ │ 305 │ │ │ source_link=source_link, │ │ 306 │ │ │ ireq=ireq, │ │ │ │ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │ │ │ cache_entry = None │ │ │ │ factory = │ │ │ │ ireq = │ │ │ │ link = =2.7)> │ │ │ │ name = 'sqlalchemy' │ │ │ │ self = LinkCandidate('https://files.pythonhosted.org/packages/8a/a4/b5991829c34af050… │ │ │ │ (from https://pypi.org/simple/sqlalchemy/) │ │ │ │ (requires-python:!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7)') │ │ │ │ source_link = =2.7)> │ │ │ │ template = │ │ │ │ version = │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ │ /Users/edgarramirez/Code/repro/pip-24.1-sqlalchemy/.venv/lib/python3.8/site-packages/pip/_intern │ │ al/resolution/resolvelib/candidates.py:158 in __init__ │ │ │ │ 155 │ │ self._ireq = ireq │ │ 156 │ │ self._name = name │ │ 157 │ │ self._version = version │ │ ❱ 158 │ │ self.dist = self._prepare() │ │ 159 │ │ self._hash: Optional[int] = None │ │ 160 │ │ │ 161 │ def __str__(self) -> str: │ │ │ │ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │ │ │ factory = │ │ │ │ ireq = │ │ │ │ link = =2.7)> │ │ │ │ name = 'sqlalchemy' │ │ │ │ self = LinkCandidate('https://files.pythonhosted.org/packages/8a/a4/b5991829c34af050… │ │ │ │ (from https://pypi.org/simple/sqlalchemy/) │ │ │ │ (requires-python:!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7)') │ │ │ │ source_link = =2.7)> │ │ │ │ version = │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ │ /Users/edgarramirez/Code/repro/pip-24.1-sqlalchemy/.venv/lib/python3.8/site-packages/pip/_intern │ │ al/resolution/resolvelib/candidates.py:247 in _prepare │ │ │ │ 244 │ │ │ exc.context = "See above for output." │ │ 245 │ │ │ raise │ │ 246 │ │ │ │ ❱ 247 │ │ self._check_metadata_consistency(dist) │ │ 248 │ │ return dist │ │ 249 │ │ │ 250 │ def iter_dependencies(self, with_requires: bool) -> Iterable[Optional[Requirement]]: │ │ │ │ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │ │ │ dist = =2.7)') │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ │ /Users/edgarramirez/Code/repro/pip-24.1-sqlalchemy/.venv/lib/python3.8/site-packages/pip/_intern │ │ al/resolution/resolvelib/candidates.py:229 in _check_metadata_consistency │ │ │ │ 226 │ │ # TODO performance: this means we iterate the dependencies at least twice, │ │ 227 │ │ # we may want to cache parsed Requires-Dist │ │ 228 │ │ try: │ │ ❱ 229 │ │ │ list(dist.iter_dependencies(list(dist.iter_provided_extras()))) │ │ 230 │ │ except InvalidRequirement as e: │ │ 231 │ │ │ raise MetadataInvalid(self._ireq, str(e)) │ │ 232 │ │ │ │ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │ │ │ dist = =2.7)') │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ │ /Users/edgarramirez/Code/repro/pip-24.1-sqlalchemy/.venv/lib/python3.8/site-packages/pip/_intern │ │ al/metadata/pkg_resources.py:249 in iter_dependencies │ │ │ │ 246 │ │ │ │ map(canonicalize_name, extras) │ │ 247 │ │ │ ) │ │ 248 │ │ │ extras = [self._extra_mapping[extra] for extra in relevant_extras] │ │ ❱ 249 │ │ return self._dist.requires(extras) │ │ 250 │ │ │ 251 │ def iter_provided_extras(self) -> Iterable[NormalizedName]: │ │ 252 │ │ return self._extra_mapping.keys() │ │ │ │ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │ │ │ extras = [ │ │ │ │ │ 'postgresql', │ │ │ │ │ 'oracle', │ │ │ │ │ 'mariadb-connector', │ │ │ │ │ 'mssql-pymssql', │ │ │ │ │ 'asyncio', │ │ │ │ │ 'postgresql-psycopg2binary', │ │ │ │ │ 'mysql-connector', │ │ │ │ │ 'postgresql-psycopg2cffi', │ │ │ │ │ 'pymysql', │ │ │ │ │ 'mysql', │ │ │ │ │ ... +9 │ │ │ │ ] │ │ │ │ relevant_extras = { │ │ │ │ │ 'postgresql', │ │ │ │ │ 'oracle', │ │ │ │ │ 'mariadb-connector', │ │ │ │ │ 'mssql-pymssql', │ │ │ │ │ 'asyncio', │ │ │ │ │ 'postgresql-psycopg2binary', │ │ │ │ │ 'mysql-connector', │ │ │ │ │ 'postgresql-psycopg2cffi', │ │ │ │ │ 'pymysql', │ │ │ │ │ 'mysql', │ │ │ │ │ ... +9 │ │ │ │ } │ │ │ │ self = =2.7'), Requirement.parse('cx_oracle>=7')] │ │ │ │ dm = { │ │ │ │ │ None: [], │ │ │ │ │ 'aiomysql': [ │ │ │ │ │ │ Requirement.parse('greenlet!=0.4.17'), │ │ │ │ │ │ Requirement.parse('aiomysql>=0.2.0') │ │ │ │ │ ], │ │ │ │ │ 'aiosqlite': [ │ │ │ │ │ │ Requirement.parse('typing_extensions!=3.10.0.1'), │ │ │ │ │ │ Requirement.parse('greenlet!=0.4.17'), │ │ │ │ │ │ Requirement.parse('aiosqlite') │ │ │ │ │ ], │ │ │ │ │ 'asyncio': [Requirement.parse('greenlet!=0.4.17')], │ │ │ │ │ 'asyncmy': [ │ │ │ │ │ │ Requirement.parse('greenlet!=0.4.17'), │ │ │ │ │ │ Requirement.parse('asyncmy!=0.2.4,>=0.2.3') │ │ │ │ │ ], │ │ │ │ │ 'mariadb_connector': [Requirement.parse('mariadb!=1.1.2,>=1.0.1')], │ │ │ │ │ 'mssql': [Requirement.parse('pyodbc')], │ │ │ │ │ 'mssql_pymssql': [Requirement.parse('pymssql')], │ │ │ │ │ 'mssql_pyodbc': [Requirement.parse('pyodbc')], │ │ │ │ │ 'mypy': [ │ │ │ │ │ │ Requirement.parse('sqlalchemy2-stubs'), │ │ │ │ │ │ Requirement.parse('mypy>=0.910') │ │ │ │ │ ], │ │ │ │ │ ... +10 │ │ │ │ } │ │ │ │ ext = 'mariadb-connector' │ │ │ │ extras = [ │ │ │ │ │ 'postgresql', │ │ │ │ │ 'oracle', │ │ │ │ │ 'mariadb-connector', │ │ │ │ │ 'mssql-pymssql', │ │ │ │ │ 'asyncio', │ │ │ │ │ 'postgresql-psycopg2binary', │ │ │ │ │ 'mysql-connector', │ │ │ │ │ 'postgresql-psycopg2cffi', │ │ │ │ │ 'pymysql', │ │ │ │ │ 'mysql', │ │ │ │ │ ... +9 │ │ │ │ ] │ │ │ │ self = SQLAlchemy [unknown version] │ │ │ │ (/private/var/folders/k7/l2cj2kv14x9dg7ljk_p20y7w0000gn/T/pip-pip-egg-info-u70tbd8… │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ UnknownExtra: SQLAlchemy 1.4.52 has no such extra feature 'mariadb-connector'