Skip to content

Dependency version specifier invalid with packaging 23.0 #458

@andrew8er

Description

@andrew8er

Describe the bug
With package managers using packaging 23.0, dependency version specifiers like stone >= 2.* are considered invalid and will fail to install a projects dependencies.

See also:

To Reproduce

  • Have this package as a dependency of a python project
  • Install with a PEP 621 compliant package manager, e. g. pdm

Expected Behavior
Dependencies install cleanly

Actual Behavior

The installation process fails while parsing the dependencies of the `dropbox` package:
pdm.termui:   Adding requirement requests>=2.16.2(from dropbox 11.36.0)
pdm.termui:   Adding requirement six>=1.12.0(from dropbox 11.36.0)
pdm.termui:   Adding requirement b''(from dropbox 11.36.0)
Traceback (most recent call last):
  File "/usr/local/bin/pdm", line 8, in <module>
    sys.exit(main())
             ^^^^^^
  File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/pdm/core.py", line 259, in main
    return Core().main(args)
           ^^^^^^^^^^^^^^^^^
  File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/pdm/core.py", line 191, in main
    raise cast(Exception, err).with_traceback(traceback)
  File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/pdm/core.py", line 186, in main
    f(project, options)
  File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/pdm/cli/commands/install.py", line 58, in handle
    actions.do_lock(
  File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/pdm/cli/actions.py", line 95, in do_lock
    mapping, dependencies = resolve(
                            ^^^^^^^^
  File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/pdm/resolver/core.py", line 35, in resolve
    result = resolver.resolve(requirements, max_rounds)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/resolvelib/resolvers.py", line 521, in resolve
    state = resolution.resolve(requirements, max_rounds=max_rounds)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/resolvelib/resolvers.py", line 402, in resolve
    failure_causes = self._attempt_to_pin_criterion(name)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/resolvelib/resolvers.py", line 238, in _attempt_to_pin_criterion
    criteria = self._get_updated_criteria(candidate)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/resolvelib/resolvers.py", line 229, in _get_updated_criteria
    self._add_to_criteria(criteria, requirement, parent=candidate)
  File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/resolvelib/resolvers.py", line 172, in _add_to_criteria
    if not criterion.candidates:
  File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/resolvelib/structs.py", line 127, in __bool__
    next(iter(self))
  File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/pdm/resolver/providers.py", line 261, in matches_gen
    yield from super_find()
               ^^^^^^^^^^^^
  File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/pdm/resolver/providers.py", line 150, in matches_gen
    candidates = self._find_candidates(reqs[0])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/pdm/resolver/providers.py", line 127, in _find_candidates
    can = make_candidate(requirement)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/pdm/models/candidates.py", line 626, in make_candidate
    return Candidate(req, name, version, link)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/pdm/models/candidates.py", line 145, in __init__
    link = req.as_file_link()  # type: ignore
           ^^^^^^^^^^^^^^^^^^
  File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/pdm/models/requirements.py", line 321, in as_file_link
    return Link(url)
           ^^^^^^^^^
  File "<string>", line 9, in __init__
  File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/unearth/link.py", line 54, in __post_init__
    if self.url.startswith(vcs_prefixes):
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: a bytes-like object is required, not 'str'

Versions

  • Using dropbox~=11.36.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions