Skip to content

Show full dependency chain when uv pip compile encounters an error running setup.py #8962

@alex

Description

@alex

When using --resolution=lowest (or lowest-direct), it's sadly not uncommon to hit errors running setup.py from very old versions of things.

Unfortunately, uv pip compile does not include the full chain of how a dependency was depended on, which can make it difficult to debug. For example:

~/p/cryptography ❯❯❯ uv pip compile --resolution=lowest-direct --universal -p 3.7 --extra=docs --extra=docstest --extra=pep8test --extra=test --extra=test-randomorder --extra=nox --extra=sdist --unsafe-package=cffi --unsafe-package=pycparser --unsafe-package=setuptools --unsafe-package=cryptography-vectors pyproject.toml > ci-constraints-requirements.txt && git diff
warning: The requested Python version 3.7 is not available; 3.13.0 will be used to build dependencies instead.
⠙ Resolving dependencies...                                                                                                  warning: The direct dependency `build` is unpinned. Consider setting a lower bound when using `--resolution-strategy lowest` to avoid using outdated versions.
warning: The direct dependency `certifi` is unpinned. Consider setting a lower bound when using `--resolution-strategy lowest` to avoid using outdated versions.
warning: The direct dependency `check-sdist{python_full_version >= '3.8'}` is unpinned. Consider setting a lower bound when using `--resolution-strategy lowest` to avoid using outdated versions.
warning: The direct dependency `click` is unpinned. Consider setting a lower bound when using `--resolution-strategy lowest` to avoid using outdated versions.
warning: The direct dependency `cryptography-vectors` is unpinned. Consider setting a lower bound when using `--resolution-strategy lowest` to avoid using outdated versions.
warning: The direct dependency `mypy` is unpinned. Consider setting a lower bound when using `--resolution-strategy lowest` to avoid using outdated versions.
warning: The direct dependency `nox` is unpinned. Consider setting a lower bound when using `--resolution-strategy lowest` to avoid using outdated versions.
warning: The direct dependency `pretend` is unpinned. Consider setting a lower bound when using `--resolution-strategy lowest` to avoid using outdated versions.
warning: The direct dependency `pytest-benchmark` is unpinned. Consider setting a lower bound when using `--resolution-strategy lowest` to avoid using outdated versions.
warning: The direct dependency `pytest-cov` is unpinned. Consider setting a lower bound when using `--resolution-strategy lowest` to avoid using outdated versions.
warning: The direct dependency `pytest-randomly` is unpinned. Consider setting a lower bound when using `--resolution-strategy lowest` to avoid using outdated versions.
warning: The direct dependency `pytest-xdist` is unpinned. Consider setting a lower bound when using `--resolution-strategy lowest` to avoid using outdated versions.
warning: The direct dependency `readme-renderer` is unpinned. Consider setting a lower bound when using `--resolution-strategy lowest` to avoid using outdated versions.
warning: The direct dependency `ruff` is unpinned. Consider setting a lower bound when using `--resolution-strategy lowest` to avoid using outdated versions.
⠋ atomicwrites==1.4.1                                                                                                          × Failed to download and build `wsgiref==0.1.2`
  ╰─▶ Build backend failed to determine requirements with `build_wheel()` (exit status: 1)

      [stderr]
      Traceback (most recent call last):
        File "<string>", line 14, in <module>
          requires = get_requires_for_build({})
        File "/Users/alex_gaynor/Library/Caches/uv/builds-v0/.tmpefXcVs/lib/python3.13/site-packages/setuptools/build_meta.py",
      line 333, in get_requires_for_build_wheel
          return self._get_build_requires(config_settings, requirements=[])
                 ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/Users/alex_gaynor/Library/Caches/uv/builds-v0/.tmpefXcVs/lib/python3.13/site-packages/setuptools/build_meta.py",
      line 303, in _get_build_requires
          self.run_setup()
          ~~~~~~~~~~~~~~^^
        File "/Users/alex_gaynor/Library/Caches/uv/builds-v0/.tmpefXcVs/lib/python3.13/site-packages/setuptools/build_meta.py",
      line 521, in run_setup
          super().run_setup(setup_script=setup_script)
          ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/Users/alex_gaynor/Library/Caches/uv/builds-v0/.tmpefXcVs/lib/python3.13/site-packages/setuptools/build_meta.py",
      line 319, in run_setup
          exec(code, locals())
          ~~~~^^^^^^^^^^^^^^^^
        File "<string>", line 5, in <module>
        File
      "/Users/alex_gaynor/Library/Caches/uv/sdists-v6/pypi/wsgiref/0.1.2/TC3J4nFCD9kJFnrhcTIuq/wsgiref-0.1.2.zip/ez_setup/__init__.py",
      line 170
          print "Setuptools version",version,"or greater has been installed."
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)?

~/p/cryptography ❯❯❯ 

Here, neither wsgiref nor atomicwrites is depended on directly, so I'm not sure which package I need to attach a minimal bound to.

Metadata

Metadata

Assignees

Labels

error messagesMessaging when something goes wrongresolverRelated to the package resolver

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions