Skip to content

Installing packages with different egg names fail in pip>=20.3 #9217

Closed
@mabouels

Description

@mabouels

Environment

  • pip version: 20.3.1
  • Python version: 3.7.9
  • OS: Linux

Description

Since pip version 20.3, installing an editable package with a different #egg={name_different_than_pkg}, no longer works.

Expected behavior

This works fine for pip versions < 20.3.

How to Reproduce

For example:

pip install -e git+https://github.com/FireXStuff/firexkit.git#egg=firexkit_dev

Output

Obtaining firexkit_dev from git+https://github.com/FireXStuff/firexkit.git#egg=firexkit_dev
  Updating ./venv/src/firexkit-dev clone
  WARNING: Generating metadata for package firexkit-dev produced metadata for project name firexkit. Fix your #egg=firexkit-dev fragments.
ERROR: Requested firexkit from git+https://github.com/FireXStuff/firexkit.git#egg=firexkit_dev has different name in metadata: 'firexkit'

Verbose Output

Non-user install because user site-packages disabled
Created temporary directory: /tmp/pip-ephem-wheel-cache-8buh9558
Created temporary directory: /tmp/pip-req-tracker-eh_z8pj5
Initialized build tracking at /tmp/pip-req-tracker-eh_z8pj5
Created build tracker: /tmp/pip-req-tracker-eh_z8pj5
Entered build tracker: /tmp/pip-req-tracker-eh_z8pj5
Created temporary directory: /tmp/pip-install-0xkvew37
Obtaining firexkit_dev from git+https://github.com/FireXStuff/firexkit.git#egg=firexkit_dev
  Checking in /home/firex/venv/src/firexkit-dev for .git (git)...
  remote.origin.url https://github.com/FireXStuff/firexkit.git
  Clone in ./venv/src/firexkit-dev exists, and has correct URL (https://github.com/FireXStuff/firexkit.git)
  Updating ./venv/src/firexkit-dev clone
  git version 2.26.2
  8f0ff2515681cc76897a392167e5b2322c01aa8d refs/remotes/origin/HEAD
  Added firexkit_dev from git+https://github.com/FireXStuff/firexkit.git#egg=firexkit_dev to build tracker '/tmp/pip-req-tracker-eh_z8pj5'
    Running setup.py (path:/home/firex/venv/src/firexkit-dev/setup.py) egg_info for package firexkit-dev
    Created temporary directory: /tmp/pip-pip-egg-info-5_36xnp5
    Running command python setup.py egg_info
    running egg_info
    creating /tmp/pip-pip-egg-info-5_36xnp5/firexkit.egg-info
    writing /tmp/pip-pip-egg-info-5_36xnp5/firexkit.egg-info/PKG-INFO
    writing dependency_links to /tmp/pip-pip-egg-info-5_36xnp5/firexkit.egg-info/dependency_links.txt
    writing requirements to /tmp/pip-pip-egg-info-5_36xnp5/firexkit.egg-info/requires.txt
    writing top-level names to /tmp/pip-pip-egg-info-5_36xnp5/firexkit.egg-info/top_level.txt
    writing manifest file '/tmp/pip-pip-egg-info-5_36xnp5/firexkit.egg-info/SOURCES.txt'
    reading manifest file '/tmp/pip-pip-egg-info-5_36xnp5/firexkit.egg-info/SOURCES.txt'
    reading manifest template 'MANIFEST.in'
    warning: no files found matching 'BUILD'
    writing manifest file '/tmp/pip-pip-egg-info-5_36xnp5/firexkit.egg-info/SOURCES.txt'
  WARNING: Generating metadata for package firexkit-dev produced metadata for project name firexkit. Fix your #egg=firexkit-dev fragments.
  Source in ./venv/src/firexkit-dev has version 4.0, which satisfies requirement firexkit from git+https://github.com/FireXStuff/firexkit.git#egg=firexkit_dev
  Removed firexkit from git+https://github.com/FireXStuff/firexkit.git#egg=firexkit_dev from build tracker '/tmp/pip-req-tracker-eh_z8pj5'
ERROR: Requested firexkit from git+https://github.com/FireXStuff/firexkit.git#egg=firexkit_dev has different name in metadata: 'firexkit'
Exception information:
Traceback (most recent call last):
  File "/home/firex/venv/lib/python3.7/site-packages/pip/_vendor/resolvelib/resolvers.py", line 171, in _merge_into_criterion
    crit = self.state.criteria[name]
KeyError: 'firexkit-dev'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/firex/venv/lib/python3.7/site-packages/pip/_internal/cli/base_command.py", line 210, in _main
    status = self.run(options, args)
  File "/home/firex/venv/lib/python3.7/site-packages/pip/_internal/cli/req_command.py", line 180, in wrapper
    return func(self, options, args)
  File "/home/firex/venv/lib/python3.7/site-packages/pip/_internal/commands/install.py", line 319, in run
    reqs, check_supported_wheels=not options.target_dir
  File "/home/firex/venv/lib/python3.7/site-packages/pip/_internal/resolution/resolvelib/resolver.py", line 122, in resolve
    requirements, max_rounds=try_to_avoid_resolution_too_deep,
  File "/home/firex/venv/lib/python3.7/site-packages/pip/_vendor/resolvelib/resolvers.py", line 445, in resolve
    state = resolution.resolve(requirements, max_rounds=max_rounds)
  File "/home/firex/venv/lib/python3.7/site-packages/pip/_vendor/resolvelib/resolvers.py", line 310, in resolve
    name, crit = self._merge_into_criterion(r, parent=None)
  File "/home/firex/venv/lib/python3.7/site-packages/pip/_vendor/resolvelib/resolvers.py", line 173, in _merge_into_criterion
    crit = Criterion.from_requirement(self._p, requirement, parent)
  File "/home/firex/venv/lib/python3.7/site-packages/pip/_vendor/resolvelib/resolvers.py", line 79, in from_requirement
    cands = build_iter_view(provider.find_matches([requirement]))
  File "/home/firex/venv/lib/python3.7/site-packages/pip/_vendor/resolvelib/structs.py", line 148, in build_iter_view
    matches = list(matches)
  File "/home/firex/venv/lib/python3.7/site-packages/pip/_internal/resolution/resolvelib/factory.py", line 240, in <genexpr>
    if constraint.is_satisfied_by(c)
  File "/home/firex/venv/lib/python3.7/site-packages/pip/_internal/resolution/resolvelib/base.py", line 66, in is_satisfied_by
    return self.specifier.contains(candidate.version, prereleases=True)
  File "/home/firex/venv/lib/python3.7/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 189, in version
    self._version = self.dist.parsed_version
  File "/home/firex/venv/lib/python3.7/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 234, in dist
    self._prepare()
  File "/home/firex/venv/lib/python3.7/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 227, in _prepare
    self._check_metadata_consistency(dist)
  File "/home/firex/venv/lib/python3.7/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 211, in _check_metadata_consistency
    raise MetadataInconsistent(self._ireq, "name", dist.project_name)
pip._internal.exceptions.MetadataInconsistent: Requested firexkit from git+https://github.com/FireXStuff/firexkit.git#egg=firexkit_dev has different name in metadata: 'firexkit'
Removed build tracker: '/tmp/pip-req-tracker-eh_z8pj5

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions