Skip to content

Requirements for Python dependency management #82

Open
@foolip

Description

@foolip

Hi @web-platform-tests/wpt-core-team!

Recently I have taken a closer look at how we track and install Python dependencies here in WPT. I wrote up two fairly detailed issues about what we're currently doing in web-platform-tests/wpt#28801 and web-platform-tests/wpt#28809.

I suspect that there's room to improve matters here, but want to gather requirements before I suggest something. But first, some problem I think are worth trying to solve:

  • Even though we vendor a lot of things, it's not enough to use ./wpt run (virtualenv is the additional dependency)
  • There's overlap between vendored and installed dependencies (e.g. aioquic, html5lib, pytest) and it's non-obvious if different versions are a problem or just fine
  • We don't pin all transient dependencies, which can (rarely) cause sudden breakage like in Unpin docutils in docs/requirements.txt wpt#28570
  • Updating tools/third_party/ is tricky, involving git subtree, and can't be merged like regular wpt PRs

Here are the requirements I would consider for any change here, roughly in order of importance:

  • Downstream users (Chromium, Gecko, WebKit) must be able to manage dependencies separately, avoiding any vendored or automatically downloaded dependencies in this repo. It should be easy to know which versions are used in wpt, but possible to diverge from that if necessary.
  • Users of ./wpt run should need at most one tool in addition to Python (currently Virtualenv) but zero is even better.
  • The distinction between direct and indirect dependencies should be clear, to avoid orphaned (unused) dependencies.
  • All dependencies, direct and indirect, should be pinned (think package-lock.json or Pipfile.lock)
  • Dependency updates should still be infrequent and deliberate, since they cause downstream work.
  • Installing dependencies and checking if they need to be updated should be fast.

I'm interested to hear if others have had trouble with dependencies, and if there are additional constraints/requirements here.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions