Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error installing extras with dependencies using the arbitrary equality clause (===) #9652

Closed
xafilox opened this issue Feb 24, 2021 · 4 comments
Labels
resolution: duplicate Duplicate of an existing issue/PR resolution: wrong project Should be reported elsewhere

Comments

@xafilox
Copy link

xafilox commented Feb 24, 2021

System info

What did you want to do?

Install a package (let's call it mypackage) with an extra (mu-metrics) that specifies a dependency (mu-client) using the arbitrary equality clause (===), that is pip install mypackage[mu-metrics]. Looking at the METADATA file in the dist_info folder of the wheel package everything seems fine and the requirement of mu-client from mu-metrics appears with the arbitrary equality clause.

Provides-Extra: documenter
Provides-Extra: mu-metrics
Requires-Dist: python-dateutil
Requires-Dist: dill (==0.2.8.1)
Requires-Dist: pandas (==0.23.4)
Requires-Dist: pyarrow (==0.14.1)
Requires-Dist: scipy (==1.3.2)
Requires-Dist: pyspark (<3.0.0,>=2.2.1)
Provides-Extra: documenter
Requires-Dist: sphinx (==3.2.1); extra == 'documenter'
Requires-Dist: networkx (==2.4); extra == 'documenter'
Requires-Dist: pygraphviz (==1.5); extra == 'documenter'
Requires-Dist: matplotlib; extra == 'documenter'
Requires-Dist: rinohtype (==0.4.2); extra == 'documenter'
Provides-Extra: mu-metrics
Requires-Dist: mu-client (===0.0.1); extra == 'mu-metrics'

Output

ERROR: Exception:
Traceback (most recent call last):
  File "/home/lauravera/workspace/venvs/attribute_generation/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 3021, in _dep_map
    return self.__dep_map
  File "/home/lauravera/workspace/venvs/attribute_generation/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2815, in __getattr__
    raise AttributeError(attr)
AttributeError: _DistInfoDistribution__dep_map

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/lauravera/workspace/venvs/attribute_generation/lib/python3.6/site-packages/pip/_vendor/packaging/requirements.py", line 113, in __init__
    req = REQUIREMENT.parseString(requirement_string)
  File "/home/lauravera/workspace/venvs/attribute_generation/lib/python3.6/site-packages/pip/_vendor/pyparsing.py", line 1955, in parseString
    raise exc
  File "/home/lauravera/workspace/venvs/attribute_generation/lib/python3.6/site-packages/pip/_vendor/pyparsing.py", line 3814, in parseImpl
    raise ParseException(instring, loc, self.errmsg, self)
pip._vendor.pyparsing.ParseException: Expected stringEnd, found '('  (at char 10), (line:1, col:11)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/lauravera/workspace/venvs/attribute_generation/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 3101, in __init__
    super(Requirement, self).__init__(requirement_string)
  File "/home/lauravera/workspace/venvs/attribute_generation/lib/python3.6/site-packages/pip/_vendor/packaging/requirements.py", line 117, in __init__
    requirement_string[e.loc : e.loc + 8], e.msg
pip._vendor.packaging.requirements.InvalidRequirement: Parse error at "'(===0.0.'": Expected stringEnd

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/lauravera/workspace/venvs/attribute_generation/lib/python3.6/site-packages/pip/_internal/cli/base_command.py", line 189, in _main
    status = self.run(options, args)
  File "/home/lauravera/workspace/venvs/attribute_generation/lib/python3.6/site-packages/pip/_internal/cli/req_command.py", line 178, in wrapper
    return func(self, options, args)
  File "/home/lauravera/workspace/venvs/attribute_generation/lib/python3.6/site-packages/pip/_internal/commands/install.py", line 317, in run
    reqs, check_supported_wheels=not options.target_dir
  File "/home/lauravera/workspace/venvs/attribute_generation/lib/python3.6/site-packages/pip/_internal/resolution/resolvelib/resolver.py", line 122, in resolve
    requirements, max_rounds=try_to_avoid_resolution_too_deep,
  File "/home/lauravera/workspace/venvs/attribute_generation/lib/python3.6/site-packages/pip/_vendor/resolvelib/resolvers.py", line 453, in resolve
    state = resolution.resolve(requirements, max_rounds=max_rounds)
  File "/home/lauravera/workspace/venvs/attribute_generation/lib/python3.6/site-packages/pip/_vendor/resolvelib/resolvers.py", line 347, in resolve
    failure_causes = self._attempt_to_pin_criterion(name, criterion)
  File "/home/lauravera/workspace/venvs/attribute_generation/lib/python3.6/site-packages/pip/_vendor/resolvelib/resolvers.py", line 207, in _attempt_to_pin_criterion
    criteria = self._get_criteria_to_update(candidate)
  File "/home/lauravera/workspace/venvs/attribute_generation/lib/python3.6/site-packages/pip/_vendor/resolvelib/resolvers.py", line 198, in _get_criteria_to_update
    for r in self._p.get_dependencies(candidate):
  File "/home/lauravera/workspace/venvs/attribute_generation/lib/python3.6/site-packages/pip/_internal/resolution/resolvelib/provider.py", line 172, in get_dependencies
    for r in candidate.iter_dependencies(with_requires)
  File "/home/lauravera/workspace/venvs/attribute_generation/lib/python3.6/site-packages/pip/_internal/resolution/resolvelib/provider.py", line 171, in <listcomp>
    r
  File "/home/lauravera/workspace/venvs/attribute_generation/lib/python3.6/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 527, in iter_dependencies
    valid_extras = self.extras.intersection(self.base.dist.extras)
  File "/home/lauravera/workspace/venvs/attribute_generation/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2978, in extras
    return [dep for dep in self._dep_map if dep]
  File "/home/lauravera/workspace/venvs/attribute_generation/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 3023, in _dep_map
    self.__dep_map = self._compute_dependencies()
  File "/home/lauravera/workspace/venvs/attribute_generation/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 3033, in _compute_dependencies
    reqs.extend(parse_requirements(req))
  File "/home/lauravera/workspace/venvs/attribute_generation/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 3094, in parse_requirements
    yield Requirement(line)
  File "/home/lauravera/workspace/venvs/attribute_generation/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 3103, in __init__
    raise RequirementParseError(str(e))
pip._vendor.pkg_resources.RequirementParseError: Parse error at "'(===0.0.'": Expected stringEnd
@uranusjr
Copy link
Member

See #9650 and pypa/packaging#336.

If you don’t mind, may I ask where did you learn about the operator (===)? It seems weird we got two issues on this in one day while practically nobody cared about this (except packaging nerds like myself) for more than five years…

@uranusjr uranusjr added resolution: duplicate Duplicate of an existing issue/PR resolution: wrong project Should be reported elsewhere labels Feb 24, 2021
@xafilox
Copy link
Author

xafilox commented Feb 24, 2021

@uranusjr Sure, it's part of the pep 440, I found it there (https://www.python.org/dev/peps/pep-0440/#arbitrary-equality). I use it to avoid installing local versions :)

@uranusjr
Copy link
Member

Thanks. That description has been there since PEP 440 became a thing, so maybe it is actually just a coincidence (hmm). I thought someone wrote/talked about this somewhere so it suddenly gained awareness to more people.

@atugushev
Copy link
Contributor

atugushev commented Feb 24, 2021

@uranusjr see also another use-case: jazzband/pip-tools#1114

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Oct 1, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
resolution: duplicate Duplicate of an existing issue/PR resolution: wrong project Should be reported elsewhere
Projects
None yet
Development

No branches or pull requests

3 participants