Skip to content

lock: incompatibility use_uv and @ http://....tar.gz #3640

@paugier

Description

@paugier

Describe the bug

Defining a dependency as

dev = ["mdformat-py-edu-fr @ http://foss.heptapod.net/py-edu-fr/mdformat-py-edu-fr/-/archive/0.1.1/mdformat-py-edu-fr.tar.gz"]

with use_uv, I get when locking

pdm.termui: Error occurs
Traceback (most recent call last):
  File "/home/pierre/.local/share/uv/tools/pdm/lib/python3.12/site-packages/pdm/termui.py", line 259, in logging
    yield logger
  File "/home/pierre/.local/share/uv/tools/pdm/lib/python3.12/site-packages/pdm/cli/actions.py", line 137, in do_lock
    resolved, new_groups = resolver.resolve()
                           ^^^^^^^^^^^^^^^^^^
  File "/home/pierre/.local/share/uv/tools/pdm/lib/python3.12/site-packages/pdm/resolver/uv.py", line 206, in resolve
    return self._parse_uv_lock(uv_lock_path)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/pierre/.local/share/uv/tools/pdm/lib/python3.12/site-packages/pdm/resolver/uv.py", line 170, in _parse_uv_lock
    candidate.hashes.append(make_hash(wheel))
                            ^^^^^^^^^^^^^^^^
  File "/home/pierre/.local/share/uv/tools/pdm/lib/python3.12/site-packages/pdm/resolver/uv.py", line 136, in make_hash
    link = Link(item["url"])
                ~~~~^^^^^^^
KeyError: 'url'

Indeed, the uv lock file contains:

[[package]]
name = "mdformat-py-edu-fr"
version = "0.1.1"
source = { url = "http://foss.heptapod.net/py-edu-fr/mdformat-py-edu-fr/-/archive/0.1.1/mdformat-py-edu-fr.tar.gz" }
dependencies = [
    { name = "jupytext" },
    { name = "mdformat-myst" },
]
sdist = { hash = "sha256:124488d1796a7ad5f98b1365fe00ff3e71846fd1f91d46e54f8b73c0cdbd78a1" }

I guess I could work on a workaround in pdm/resolver/uv.py (somewhere around https://github.com/pdm-project/pdm/blob/main/src/pdm/resolver/uv.py#L170) but I first like to have feedback on this bug and on the proper way to solve it.

To reproduce

Lock with use_uv and

dev = ["mdformat-py-edu-fr @ http://foss.heptapod.net/py-edu-fr/mdformat-py-edu-fr/-/archive/0.1.1/mdformat-py-edu-fr.tar.gz"]

Expected Behavior

PDM should produce a lock file.

Environment Information

$ pdm info && pdm info --env
PDM version:
  2.25.9
Python Interpreter:
  /home/pierre/output/teach/py-edu-fr/books/intro-prog/.venv/bin/python (3.13)
Project Root:
  /home/pierre/output/teach/py-edu-fr/books/intro-prog
Local Packages:
  /home/pierre/output/teach/py-edu-fr/books/intro-prog/.venv/lib/python3.13/site
-packages
{
  "implementation_name": "cpython",
  "implementation_version": "3.12.10",
  "os_name": "posix",
  "platform_machine": "x86_64",
  "platform_release": "6.1.0-40-amd64",
  "platform_system": "Linux",
  "platform_version": "#1 SMP PREEMPT_DYNAMIC Debian 6.1.153-1 (2025-09-20)",
  "python_full_version": "3.13.7",
  "platform_python_implementation": "CPython",
  "python_version": "3.13",
  "sys_platform": "linux"
}

Verbose Command Output

No response

Additional Context

No response

Are you willing to submit a PR to fix this bug?

  • Yes, I would like to submit a PR.

Metadata

Metadata

Assignees

No one assigned

    Labels

    🐛 bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions